2013-06-28 3 views
3

Я делаю небольшое веб-приложение для отправки SMS. Я должен показать пользователь своего последнее отправленного SMS (например, SMS-приложение в Android, прошивка ...)Получение последних сообщений получателями в приложении SMS - запрос SQL

Моих три таблиц:

--------- ----------- ----------- 
| users | | sms | | indexes | 
--------- ----------- ----------- 
    id   id   id 
    ..   user_id  user_id 
       receiver  phone_n 
      created_at  name 

Я уже сделал запрос SQL, чтобы получить последние отправленные сгруппированные по имени/номеру телефона номера индексов:

SELECT S.receiver, S.message, I.name, temp.last_sent, I.id 
FROM sms S 
INNER JOIN (
    SELECT receiver, user_id, MAX(created_at) AS last_sent 
     FROM sms 
     WHERE user_id = ? 
     GROUP BY receiver, user_id 
    ) temp 
ON S.receiver = temp.receiver 
AND S.user_id = temp.user_id 
AND S.created_at = temp.last_sent 
LEFT OUTER JOIN indexes I ON S.receiver = I.phone_number WHERE I.user_id = ? 
ORDER BY temp.last_sent DESC 

Этот запрос SQL работает. Я получаю от имени получателя последнее SMS-сообщение, которое пользователь отправляет на него. Но я получаю только SMS, где приемник присутствует в таблице индексов. Все SMS, отправленные получателям, у которых не сохранены номера телефонов в этой базе данных, не отображаются.

Я знаю, что допустил ошибку с моим LEFT OUTER JOIN indexes. Но

Так как я могу получить последнее SMS, отправленное получателями, заказанное last_sent, с сохраненными номерами телефонов или нет в индексах?

Спасибо.

ответ

2

Перемещение ИНЕКЕ в предложении ON для LEFT OUTER JOIN

SELECT S.receiver, S.message, I.name, temp.last_sent, I.id 
FROM sms S 
INNER JOIN (
    SELECT receiver, user_id, MAX(created_at) AS last_sent 
     FROM sms 
     WHERE user_id = ? 
     GROUP BY receiver, user_id 
    ) temp 
ON S.receiver = temp.receiver 
AND S.user_id = temp.user_id 
AND S.created_at = temp.last_sent 
LEFT OUTER JOIN indexes I ON S.receiver = I.phone_number 
AND I.user_id = ? 
ORDER BY temp.last_sent DESC 
+0

работает как шарм, спасибо Вам! – netvision73

+0

Вы скалы @ Kickstart – EpokK