
| Если это ваш первый визит, рекомендуем почитать справку по форуму. Для размещения своих сообщений необходимо зарегистрироваться. Для просмотра сообщений выберите раздел. |
![]() |
||
не детский запрос MySQL
|
||
| Философия, технологии, алгоритмы! |
![]() |
|
|
Опции темы |
|
|
#1 |
|
Форумец
Сообщений: 2
Регистрация: 31.05.2004
|
не детский запрос MySQL
Есть две таблицы, 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 Заранее благодарен за помощь |
|
|
|
|
#3 |
|
Форумец
Сообщений: 2
Регистрация: 31.05.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 И все. Во истину - истина где-то рядом
|
|
|