Php 通过SMS应用程序中的接收者获取最后一条消息-SQL请求
我正在制作一个小的网络应用程序来发送短信。我必须向用户显示他们最后发送的短信(比如安卓系统中的短信应用程序、iOS…) 我的三张桌子:Php 通过SMS应用程序中的接收者获取最后一条消息-SQL请求,php,mysql,sql,Php,Mysql,Sql,我正在制作一个小的网络应用程序来发送短信。我必须向用户显示他们最后发送的短信(比如安卓系统中的短信应用程序、iOS…) 我的三张桌子: --------- ----------- ----------- | users | | sms | | indexes | --------- ----------- ----------- id id id .. user_id user_id
--------- ----------- -----------
| users | | sms | | indexes |
--------- ----------- -----------
id id id
.. user_id user_id
receiver phone_n
created_at name
我已发出SQL请求,以获取按名称/电话号码分组的上次发送的SMS索引表:
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请求有效。我通过接收者的名字获取用户发送给它的最后一条短信。
但我只收到了在索引表中存在接收者的短信。
发送给未将其电话号码保存在此数据库中的接收者的所有短信都不会显示
我知道我的左外部联接索引出错了。但是
那个么,我怎样才能得到由接收者发送的最后一条短信,按最后发送的短信排序,电话号码是否保存在索引中
谢谢。将WHERE子句移动到左侧外部联接的ON子句中
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