Есть 2 таблицы 1. [sql]mytable1 ________ id | name ------------ 1 | text1 ------------ 2 | text2 ------------ 3 | text3 ------------[/sql] 2. [sql]mytable2 ________ id | voice ----------- 1 | 1 ------ 3 | 2 ------ 2 | 1 ------ 1 | 5 ------ 3 | 1 --------[/sql] Как сделать сортировку из ходя из суммы второй таблицы, например если mytable1.id=1: mytable2.voice = 6,значит id1 на первом месте, id3 = 3 на втором и id2 = 1 на последнем
[sql]SELECT mytable1.* FROM mytable1, mytable2 WHERE mytable1.id = mytable2.id GROUP BY mytable1.id ORDER BY SUM(voice) DESC[/sql]
ну а если для полного идеала, так получилось, чтобы полученный результат составляет из того что есть в mytable2, т.е. в mytable2 например только 3 id, а в mytable1 10 id, нужно чтобы остальные тоже были получены пример: [sql]mytable1 ________ id | name ------------ 1 | text1 ------------ 2 | text2 ------------ 3 | text3 ------------ 4 | text4 ------------ 6 | text5 ------------ 5 | text6[/sql] 2. [sql]mytable2 ________ id | voice ----------- 1 | 1 ------ 3 | 2 ------ 2 | 1 ------ 1 | 5 ------ 3 | 1 --------[/sql] результат, типа такого: [sql]id text voice 1 | text1 | 6 3 | text3 | 3 2 | text4 | 2 4 | text4 | 0 5 | text4 | 0 6 | text4 | 0[/sql]
Ti Есть подозрение что запрос не пройдет... Или вернет некорректные результаты, т.к. не все столбцы, которые надо показать находятся в операторе group by. Ну и не люблю я cross join. =)) Тупо сортировка: [sql]SELECT id FROM mytable2 as m2 GROUP BY id ORDER BY SUM(voice) DESC[/sql] Вывод всех данных из первой таблицы, для которых есть записи во второй таблице: [sql]SELECT m1.id, m1.text FROM mytable1 as m1 join (select id, sum(voice) as mysum from mytable2 GROUP BY id) as t2 on m1.id=t2.id ORDER BY t2.mysum DESC [/sql] UPD: Добавляем left outer: [sql]SELECT m1.id, m1.text, t2.mysum FROM mytable1 as m1 left outer join (select id, sum(voice) as mysum from mytable2 GROUP BY id) as t2 on m1.id=t2.id ORDER BY t2.mysum DESC [/sql] Правда вместо 0 будет null. По идее должна быть какая нибудь стандартная mysql функция для превращения null в 0 (щас как-то лень искать).
интересный ход, а как получить результат позиции например ID3 позиция 2 когда сумму voice я хранил в той же первой таблице у меня позиция вычислялась таким образом [sql]SELECT `rowid` FROM (SELECT @n := @n +1 AS `rowid`, `voice`, `id` FROM `mytable1` , (SELECT @n :=0) AS z ORDER BY `voice` DESC) AS x WHERE `id` = '1'[/sql] т.е. таблица была такого рода: Код (Text): id text voice но теперь, задача поставлена так, чтобы voice хранить в отдельной таблице, вот тут я уже не представляю как вычислить позицию для записи
Запрос в предыдущем комментарии возвращает таблицу которая у Вас и была. Просто сделайте с этой таблицей то же самое что и со старой. Далее, посмотрев на получившийся запрос, можно попробовать его упростить.
[sql]SELECT m1.id, m1.text, IFNULL(t2.mysum,0) mysum FROM mytable1 as m1 left outer join (select id, sum(voice) as mysum from mytable2 GROUP BY id) as t2 on m1.id=t2.id ORDER BY t2.mysum DESC[/sql]