дана таблица "table" в которой содержаться следующие данные - id команды (team_id) - участник команды (member) - очки (score). Нужно выбрать лучшего участника из каждой команды, то есть результат запроса должен содержать все три поля, где участник лучший по очкам и так для каждой команды.
Пожалуйста представьте полный запрос. Вот таблица - 'table':
team_id | member | score
------------------------------
1 | A | 10
------------------------------
1 | B | 11
------------------------------
1 | C | 12
------------------------------
2 | D | 11
------------------------------
2 | E | 9
------------------------------
В результате запроса хочу получить:
team_id | member | score
------------------------------
1 | C | 12
------------------------------
2 | D | 11
------------------------------
Сделать это нужно одним запросом с использованием вложенных, если получится без вложенных - флаг в руки. Если будут другие предложения, то я их тоже хочу услышать.
Спустя 1 час, 2 минуты, 29 секунд (12.11.2006 - 12:05) Rem написал(а):
$sQuery="SELECT * FROM `table` ORDER BY `score` DESC;"; $rRes=mysql_query($sQuery); while ($oMember=mysql_fetch_object($rRes)) { $team_id=$oMember->team_id; $a[$team_id]++; if ($a[$team_id]<2) { //вывод того, что надо } else { //ничего не делаем, такая ко*цензура* уже была } }
жду лям. :D
Спустя 1 час, 10 минут, 34 секунды (12.11.2006 - 13:15) 4ervyak написал(а):
$query = ("SELECT `team_id`,`member`,`score` FROM `table1` WHERE (`team_id`,`score`) in (SELECT `team_id`,MAX(`score`) FROM `table1` GROUP BY `team_id`)");
Спустя 15 минут, 10 секунд (12.11.2006 - 13:31) SliveR написал(а):
Отличное решение, я писал подобное, но искал в множестве только по одному параметру, а не по паре, поэтому ничего не получалось и запарился решать.
Вот еще одно решение этой задачи, кому интересно:
SELECT T.Team, T.Member, S.MSCORE FROM
(SELECT Team, MAX( Score ) AS MSCORE FROM tbl GROUP BY Team) S, tbl T
WHERE T.Team = S.Team AND T.Score = S.MSCORE
GROUP BY T.Team, T.Member, S.MSCORE
Предыдущее конечно более элегантное, но это как вариант.
Вот еще одно решение этой задачи, кому интересно:
SELECT T.Team, T.Member, S.MSCORE FROM
(SELECT Team, MAX( Score ) AS MSCORE FROM tbl GROUP BY Team) S, tbl T
WHERE T.Team = S.Team AND T.Score = S.MSCORE
GROUP BY T.Team, T.Member, S.MSCORE
Предыдущее конечно более элегантное, но это как вариант.