|
|
|
| в таблице выводится
1 10 10 100%
2 12 8 67%
3 10 7 70%
4 9 7 78%
|
первый столбец - это место по 3-му столбцу, четвертый столбец = 3-ий/2-ой*100%
можно ли в пятом столбце вывести места по 4-му столбцу, т.е. чтобы было так:
1 10 10 100% 1
2 12 8 67% 4
3 10 7 70% 3
4 9 7 78% 2
|
значения для 3-го и 3-го столбца берутся из бд | |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:04)
| | Можно.
P.S. Но пока Вы не приведете php-код и дамп таблицы (если это MySQL-ная таблица), посоветовать, каким именно образом лучше всего этого достичь - крайне трудно. | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 10:08)
| | в бд
id one two
1 12 8
2 9 7
3 10 10
4 10 7
|
вывожу
<?
$query = "SELECT * FROM pingpong_player order by two DESC";
$plr = mysql_query($query);
if(mysql_num_rows($plr)>0)
{
while($player = mysql_fetch_array($plr))
{
echo "<tr>
<td><div style=\"text-align:center;\">$n</div></td>
<td><div style=\"margin-left:15px;\">".$player["one"]."</div></td>
<td><div style=\"margin-left:15px;\">".$player["two"]."</div></td>";
if ($player["two"]>0) echo round($player["two"]/$player["one"]*100,0)."%";
else echo "0";
echo "</div></td>
";
$n++;
}
}
|
| |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:18)
| | дамп - это то, что в phpMyAdmin вызывается на закладке 'export' | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 10:20)
| | я знаю...что такое дамп...но там действительно больше нет...счас выложу раз вам надо | |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:27)
| |
CREATE TABLE `player` (
`id_player` smallint(4) unsigned NOT NULL auto_increment,
`one` tinytext NOT NULL,
`two` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id_player`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;
#
# Дамп данных таблицы `player`
#
INSERT INTO `player` VALUES (1, 12, 8);
INSERT INTO `player` VALUES (2, 9, 7);
INSERT INTO `player` VALUES (3, 10, 10);
INSERT INTO `player` VALUES (4, 10, 7);
|
| |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:27)
| | конечно там больше нет.
Но набивать тестовую таблицу руками (даже если в ней четыре строчки) и выполнить готовый sql-фрагмент - немного разные задачи. | |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:18)
| |
SELECT t1.id_player, t1.one, t1.two, t1.two / t1.one *100 AS pct, count( * ) AS rate
FROM player AS t1
JOIN player AS tn ON tn.two / tn.one >= t1.two / t1.one
GROUP BY t1.id_player, t1.one, t1.two
ORDER BY two DESC , one DESC
|
С учетом того, конечно, что one и two - числовые поля, а не текстовые. | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 10:35)
| | где про это почитать можно?
JOIN - впервые вижу | |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 10:43)
| | э... тут я даже не знаю, что ответить...
В учебнике по SQL, которым Вы пользуетесь.
Я, конечно, могу дать ссылку на JOIN в руководстве по MySql http://www.mysql.ru/docs/man/JOIN.html, но это не самый лучший способ изучения языка. | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 10:58)
| | что то немного не так
когда у двух одинаковое значение то выводит:
1 5 5 100% 2
2 4 4 100% 2
|
а можно вместо 2 и 2 - 1 и 2?
и у кого 0 0 0% должно быть не выводит:( | |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 11:49)
| | дамп с примером таблицы и требуемый ответ можно глянуть? | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 12:18)
| |
CREATE TABLE `player` (
`id_player` smallint(4) unsigned NOT NULL auto_increment,
`one` smallint(6) NOT NULL default '0',
`two` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id_player`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
#
# Дамп данных таблицы `player`
#
INSERT INTO `player` VALUES (1, 12, 8);
INSERT INTO `player` VALUES (2, 9, 7);
INSERT INTO `player` VALUES (3, 10, 10);
INSERT INTO `player` VALUES (4, 10, 7);
INSERT INTO `player` VALUES (5, 9, 9);
|
должно быть
1 10 10 100% 1
2 9 9 100% 2
3 12 8 67% 5
4 10 7 70% 4
5 9 7 78% 3
|
| |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 13:19)
| | я вижу, что первый столбик - явно не id. Что это?
И чем строка 10 10 раньше строки 9 9, если процент у обеих одинаковый?
И наконец, где в примере нули? | |
|
|
|
|
|
|
|
для: Trianon
(18.10.2006 в 13:30)
| |
CREATE TABLE `player` (
`id_player` smallint(4) unsigned NOT NULL auto_increment,
`one` smallint(6) NOT NULL default '0',
`two` smallint(6) NOT NULL default '0',
PRIMARY KEY (`id_player`)
) TYPE=MyISAM AUTO_INCREMENT=6 ;
#
# Дамп данных таблицы `player`
#
INSERT INTO `player` VALUES (1, 12, 8);
INSERT INTO `player` VALUES (2, 9, 7);
INSERT INTO `player` VALUES (3, 10, 10);
INSERT INTO `player` VALUES (4, 10, 7);
INSERT INTO `player` VALUES (5, 9, 9);
INSERT INTO `player` VALUES (6, 0, 0);
|
1 10 10 100% 1
2 9 9 100% 2
3 12 8 67% 5
4 10 7 70% 4
5 9 7 78% 3
6 0 0 0% 6
|
1 столбик отражает место занимаемое по 3 столбцу (10, 9, 8, 7, 7, 0)
10 выше 9 потому что 10>9...в принцепе можно и
1 10 10 100% 1
2 9 9 100% 1
3 12 8 67% 5
4 10 7 70% 4
5 9 7 78% 3
6 0 0 0% 6
|
| |
|
|
|
|
|
|
|
для: P@Sol
(18.10.2006 в 13:32)
| | Trianon, жду помощи | |
|
|
|
|
|
|
|
для: P@Sol
(20.10.2006 в 09:13)
| | Как и почему должен выглядеть результат если добавить строку
INSERT INTO `player` VALUES (7, 10, 7);
| ? | |
|
|
|
|
|
|
|
для: Trianon
(20.10.2006 в 09:33)
| | желательно так:
1 10 10 100% 1
2 9 9 100% 2
3 12 8 67% 6
4 10 7 70% 4 //id=4
5 10 7 70% 5 //id = 7
6 9 7 78% 3
7 0 0 0% 7
|
| |
|
|
|
|
|
|
|
для: P@Sol
(20.10.2006 в 09:57)
| | Ок. подумаю. | |
|
|
|
|
|
|
|
для: P@Sol
(20.10.2006 в 09:57)
| | так... а почему пятый столбец у id=4 и id=7 отличается? | |
|
|
|
|
|
|
|
для: Trianon
(20.10.2006 в 11:11)
| | желательно чтобы было так:
1 10 10 100% 1
2 9 9 100% 2
3 12 8 67% 6
4 10 7 70% 4 //id=4
5 10 7 70% 5 //id = 7
6 9 7 78% 3
7 0 0 0% 7
|
тут различаются только тем, что 4-ая строка выше 5-ой (получается что опять же от id зависит)
но можно и так
1 10 10 100% 1
2 9 9 100% 1
3 12 8 67% 6
4 10 7 70% 4 //id=4
5 10 7 70% 4 //id = 7
6 9 7 78% 3
7 0 0 0% 7
|
тот код что написан выше выдает
1 10 10 100% 2
2 9 9 100% 2
3 12 8 67% 6
4 10 7 70% 5 //id=4
5 10 7 70% 5 //id = 7
6 9 7 78% 3
|
| |
|
|
|
|
|
|
|
для: P@Sol
(20.10.2006 в 12:02)
| | не получается? | |
|
|
|
|
|
|
|
для: P@Sol
(23.10.2006 в 11:01)
| | Задача неясна.
Самое близкое, что мне удалось получить
это
SELECT t1.*, coalesce(t1.two/t1.one*100, 0) as s4, 1+count(t2.id_player) as s5
from player as t1 left join player as t2 on
t1.two*t2.one<t2.two*t1.one
group by t1.id_player
order by t1.two desc, t1.id_player desc
|
Если охота выжимать собственный (весьма абстрагированный от смысла) результат - действуйте сами.
В конце концов,какую-то коррекцию результатов можно и на уровне php сделать. | |
|
|
|
|
|
|
|
для: Trianon
(23.10.2006 в 14:13)
| | >Задача неясна.
>Если охота выжимать собственный (весьма абстрагированный от смысла) результат - действуйте сами.
я дал все данные, которые есть (или могут быть)...
1 10 10 100% 2
2 9 9 100% 2
3 12 8 67% 6
4 10 7 70% 5 //id=4
5 10 7 70% 5 //id = 7
6 9 7 78% 3
7 0 0 0% 7
|
1-ый стольец место, которое занимает игрок по очкам;
2-ой максимальное кол-во очков, которое мог набрать игрок,
3-ий набранное кол-во очков
4-ый процент набранных очков
5-ый место по проценту набранных очков
>В конце концов,какую-то коррекцию результатов можно и на уровне php сделать.
можно..только, пожалуйста, расскажите как считается столбец s5?
Никак не разберусь с JOIN (читал Л. Томсон и Л. Веллинга) | |
|
|
|
|
|
|
|
для: P@Sol
(24.10.2006 в 17:27)
| | s5 вычисляется как count(t2.id_player) group by t1.id_player
то есть считается число рядов таблицы t2 подошедших к ряду таблицы t1по условию
t1.two*t2.one<t2.two*t1.one, то есть когда ряды таблицы t2 имеют процент больший, чем ряд таблицы t1.
Для понимания можно попробовать вывести
SELECT t1.*, t2.*,coalesce(t1.two/t1.one*100, 0) as s4
from player as t1 left join player as t2 on
t1.two*t2.one<t2.two*t1.one
|
и посчитать строки | |
|
|
|