2013-09-12 3 views
0

У меня есть почтовый ящик сообщений для моих пользователей, у меня есть таблица «сообщений» и таблица «пользователей». Таблица сообщений содержит to и from поля, содержащие идентификаторы пользователей.SQL для сообщений inbox

Я хочу, чтобы выбрать самое последнее сообщение от каждого пользователя, где to поле является текущим идентификатором пользователя, т.е.

«выберите (последнее сообщение, по Message.ID) из (уникальных пользователей), где Message.to = $ currentUserID (и слева присоединиться к Пользователю, где UserID = Message.from)»

Я хочу, чтобы в конечном итоге с чем-то вроде этого:

http://www.innerfence.com/blog/wp-content/uploads/screenshot-iphone-inbox-thumb.png

Я не могу понять, запрос мне нужно дляэто, пожалуйста, помогите ..!

+0

Это классический вопрос в SQL, называемый «наибольший n на группу». Ваш пример - самый простой случай - «наибольший 1 по группе». Прочтите http://stackoverflow.com/questions/121387/fetch-the-row-which-has-the-max-value-for-a-column и посмотрите, сможете ли вы его решить, если нет, разместите свои проблемы, и мы Помогите. – Konerak

+0

Интересно, благодаря @Konerak я посмотрю, что я могу сделать:. \ – Tim

+0

Я пошел, насколько я понимаю, 'SELECT для сообщения * \t \t \t \t \t \t ОТ сообщения t1 \t \t \t \t \t \t LEFT OUTER РЕГИСТРИРУЙТЕСЬ пользователи t2 \t \t \t \t \t \t \t НА t1.from = t2.id И ((t1. "Дата" Tim

ответ

0

Попробуйте это. Он проверен и работает нормально. Обновлено, чтобы включить информацию об отправителе.

SELECT * FROM `messages` tm LEFT JOIN `users` tu ON `tm.from` = `tu.userid` 
WHERE `tm.date` IN 
    (SELECT MAX(`date`) FROM `messages` WHERE `to` = $currentUserID GROUP BY `from`); 
+0

Это похоже на самое близкое до сих пор! Позвольте мне попробовать ... – Tim

+0

Это потрясающе: D Спасибо, человек, я изменил «дату» на ID, хотя, поскольку идентификатор всегда будет последним. Как я могу адаптировать это для включения информации о пользователе, где message.from = user.id? – Tim

+0

Я обновил ответ – P5Coder

Смежные вопросы