Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过SMS应用程序中的接收者获取最后一条消息-SQL请求_Php_Mysql_Sql - Fatal编程技术网

Php 通过SMS应用程序中的接收者获取最后一条消息-SQL请求

Php 通过SMS应用程序中的接收者获取最后一条消息-SQL请求,php,mysql,sql,Php,Mysql,Sql,我正在制作一个小的网络应用程序来发送短信。我必须向用户显示他们最后发送的短信(比如安卓系统中的短信应用程序、iOS…) 我的三张桌子: --------- ----------- ----------- | users | | sms | | indexes | --------- ----------- ----------- id id id .. user_id user_id

我正在制作一个小的网络应用程序来发送短信。我必须向用户显示他们最后发送的短信(比如安卓系统中的短信应用程序、iOS…)

我的三张桌子:

---------   -----------   -----------
| 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