Большой Воронежский Форум
» Программирование>не детский запрос MySQL
arekus 09:26 31.05.2004
Есть две таблицы, A и В, примерно такие:
A:
uid(AUTO_INCREMENT) - nickname
1 - Вася
2 - Петя
3 - Лена
...

В:
message_uid(AUTO_INCREMENT) - from_uid - to_uid - message
1 - 1 - 2 - ля-ля
2 - 2 - 2 - тополя
3 - 1 - 3 - bla-bla

Задача - получить одним запросом последний (GREATEST(message_uid)) message для пользователя (to_uid). То есть что-т типа того:
SELECT A.nickname, B.message
FROM A
LEFT JOIN B ON B.to_user_id = A.uid
WHERE message_uid = MAX(message_uid)
GROUP BY A.uid

Заранее благодарен за помощь [Ответ]
Alex__G 23:28 31.05.2004
Тяжко без подзапроса . [Ответ]
arekus 06:28 01.06.2004
Да, я покамест решаю эту задачу с подзапросом. Но без подзапроса в решении было еще одно подключение таблицы В (AS B1), и в условии WHERE было проставлено, чтобы значение B.message_uid > B1.message_uid OR (B.message_uid IS NULL AND B1.message_uid IS NULL) - но, по ходу, этого условия недостаточно, ибо возникают некоторые неприятные выводы, вернее отсутствие оных (например в случае, если message только один - => вместо > проблему только усугубляют).
В общем, надеюсь, что кто-то все-таки окажется посообразительнее меня и разберется какое тут условие нужно.
(Кстати, в скобках после OR описан случай, когда в В вообще нет message для пользователя)

arekus добавил [date]1086061285[/date]:
В соседнем окне ответ нашелся. Вместо WHERE и всего что ниже написано, досточно поставить
ORDER BY B.message_id DESC
LIMIT 1
И все.
Во истину - истина где-то рядом [Ответ]
Вверх