Есть две таблицы, 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
Заранее благодарен за помощь
[Ответ]
Да, я покамест решаю эту задачу с подзапросом. Но без подзапроса в решении было еще одно подключение таблицы В (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
И все.
Во истину - истина где-то рядом
[Ответ]