Необходимо делать выборку всего из users, отсортированного по meta.rate, при этом из meta кроме принципа сортировки ни чего не получаем. Результат должен быть следующим:
3 Семен Пошты //rate = 44
2 андрей давыдов //rate = 12
4 Дамир Исулаев //rate = 10
1 алексей сидоров //rate = 3
DeepVarvar
Отправлено: 09 Февраля, 2013 - 10:54:12
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Благодарю! Прочитал и по ссылке и так про Join-ы, но не совсем понял.
Вот сложный пример из реальной жизни с которым трахаюсь уже второй день. Есть таблица с данными небольшого форума (школьный сайт, разрабатывался школьниками). Таблица не нормализована, и записи с форумом, темами и постами хранятся в ней одной.
Есть запрос
WHERE Forum.type='topic'AND Forum.forum_id = $id AND Users.id = Forum.user_id
LIMIT30;
Который выводит топики в конкретном форуме с информацией и о создателе (Users.json). Моя задача стоит в том, что-бы этот вывод отсортировать по последнему добавленному сообщению, при том что эти сообщения добавляются в ту-же самую таблицу.
По тому что я понял, я пробую делать так:
(Добавление)
т.е. нужно отсортировать вывод топиков по последнему добавленному в него посту. Так как все добавляется с A_I то и сортируем мы по id. Последний добавленный пост имеет самый большой айди и по убыванию..
DeepVarvar
Отправлено: 09 Февраля, 2013 - 14:44:46
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
SELECT f .*, m.id sid FROM test.Test f JOIN test.Test m ON f.id = m.topic_id WHERE f.forum_id =1 GROUPBY f.id ORDERBY m.id DESC;
+----+----------+----------+-------+-----+
| id | forum_id | topic_id | type | sid |
+----+----------+----------+-------+-----+
| 4 | 1 | 4 | topic | 4 |
| 3 | 1 | 3 | topic | 3 |
| 2 | 1 | 2 | topic | 2 |
+----+----------+----------+-------+-----+
3 rows INSET(0.00 sec)
DeepVarvar
Отправлено: 09 Февраля, 2013 - 14:53:24
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Помог: 353 раз(а)
Anguis пишет:
Не получилось
Ну и что мы теперь гадать будем на каждом поле? Вы так и не сказали по какому полю нужна группировка и по каким условиям. Может это пост-группировка, тогда дело уже за HAVING.
Покинул форум
Сообщений всего: 253
Дата рег-ции: Июнь 2012
Помог: 2 раз(а)
Прошу прощения что невнятно изъясняюсь. Задача - вывести все топики (type='topic') в порядке последнего добавленного в него сообщения (стандартная фича на всех форумах)
Как видно из таблицы топиков у нас всего три. Вот этот запрос верно сортирует, но добавляет дубликаты строк (по всем найденным id), вот нужен такой-же запрос только, что-бы в результате было не шесть строк, а три, по количеству топиков.
Таблица по которой выполняется сортировка должна быть приоритетной!!! СНАЧАЛА находим последние добавленные посты, потом уже из их записей берем инфу о топиках по topic_id, и дальше все что угодно!)) Благодарю всех кто отозвался. Mysql для меня труден в понимании, очень много нюансов. Зато теперь на всю жизнь запомню как mysql работает с приоритетами и как они порой бывают важны!) (Добавление)
Однако желаемого результата сортировки я так и не добился.. Почему? Все из-за тех-же приоритетов, если быть точнее, порядка выполнения запроса. Все DISTINCT-ы и GROUP BY, а так-же WHERE и ON выполняются перед ORDER BY и упорядочивается результат уже сгруппированный и отсортированный всевозможными WHERE и DISTINCT. Можно и это обойти. Сделать так SELECT ... FROM (SELECT * FROM Forum ORDER BY id DESC) WHERE ... Однако тут уже встает вопрос производительности и оправданности такого метода. Ибо неизвестно сколько времени будет выполняться такой запрос на большой таблице в несколько тысяч строк...
Ни разу еще не сталкивался с таким ограничениями в MYSQL. Теперь понимаю, отчего некоторые программисты его хают.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.