|
|
|
| Второй день не могу составить элементарный запрос.
Нужно вывести последние темы форума (т.е. темы в котоых последние сообщения).
Структура:
Структура таблицы с форумами:
forum_id | name
Структура таблицы с темами:
thread_id | name | forum_id
Структура таблицы с сообщениями:
mess_id | text | thread_id
|
Как это сделать одним запросом? | |
|
|
|
|
|
|
|
для: Axxil
(22.11.2006 в 22:44)
| | Ну например так:
select name from <имя таблицы с темами>
where thread_id in(select thread_id from <имя таблицы с сообщениями>
where mess_id = MAX(mess_id));
Я, к сожалению, сейчас не могу его проверить, но думаю должно сработать. | |
|
|
|
|
|
|
|
для: AlexelA
(22.11.2006 в 23:54)
| | Осталось только научить MySQL 3 понимать вложенные запросы :)
Желательно штатными средствами.
Я как-то раньше делал. Только забыл. Давно уже форумы не писал... | |
|
|
|
|
|
|
|
для: Axxil
(23.11.2006 в 00:02)
| | К сожалению, начал работать с 4-ой версии и не знаю,
пойдет ли такой запрос:
Пусть t1 - таблица с темами
t2 - таблица с сообщениями
Тогда
select t1.name,t1.thread_id,t2.thread_id,t2.mess_id from t1,t2
where t1.thread_id = t2.thread_id and t2.mess_id = MAX(t2.mess_id);
Ну а потом, средствами любого языка, выбрать переменную с именем t1.name
Так пойдет? | |
|
|
|
|
|
|
|
для: AlexelA
(23.11.2006 в 00:28)
| | Не, так не будет работать
Invalid use of group function | |
|
|
|
|
|
|
|
для: Axxil
(23.11.2006 в 09:16)
| | Согласен, стал уже забывать mysql
Исправляюсь:
select f.name, f.thread_id, m.thread_id,MAX(mess_id)
from <имя таблицы с темами> f, <имя таблицы с сообщениями> m
where f.thread_id = m.thread_id
group by (m.thread_id)
order by (m.mess_id) DESC
limit 2
В данном случае ограничиваемся последними 2 сообщениями
Так должно получиться | |
|
|
|
|
|
|
|
для: Axxil
(22.11.2006 в 22:44)
| | У вас нет поля даты - вы по номеру сообщений ориентируетесь? | |
|
|
|
|
|
|
|
для: cheops
(23.11.2006 в 00:44)
| | Точно. На самом деле там полно ещё полей. Я привёл основные.
Ну, считаем что в таблицах threads и messages есть ещё поля даты (thread_date,mess_date). | |
|
|
|
|
|
|
|
для: Axxil
(22.11.2006 в 22:44)
| |
SELECT t.name, f.name, thread_id, forum_id FROM posts p LEFT JOIN thread t ON p.thread_id=t.thread_id LEFT JOIN forums f ON t.forum_id=f.forum_id ORDER BY mess_id DESC LIMIT 5
|
как-то так...
ни или вроде такого:
SELECT t.name, f.name, thread_id, forum_id FROM posts p, thread t, forums f WHERE p.thread_id=t.thread_id AND t.forum_id=f.forum_id ORDER BY mess_id DESC LIMIT 5
|
| |
|
|
|
|
|
|
|
для: Loki
(23.11.2006 в 10:07)
| | Опять мимо...
Это первое было что я попробовал...
Трабл в том что сообщений в теме может быть много и данный запрос не делает уникальность тем.
Т.е. грубо говоря если в одной теме было 5 последних сообщений, то запрос выведет 5 раз эту тему. А надо чтоб было 5 последних разных тем | |
|
|
|
|
|
|
|
для: Axxil
(23.11.2006 в 10:36)
| |
SELECT t.name, f.name, DISTINCT(thread_id), forum_id FROM posts p, thread t, forums f WHERE p.thread_id=t.thread_id AND t.forum_id=f.forum_id ORDER BY mess_id DESC LIMIT 5
|
или
SELECT t.name, f.name, thread_id, forum_id FROM posts p, thread t, forums f WHERE p.thread_id=t.thread_id AND t.forum_id=f.forum_id ORDER BY mess_id DESC GROUP BY thread_id LIMIT 5
|
| |
|
|
|