Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Mysql 同时使用ORDER BY、GROUP BY和multiple SELECT_Mysql - Fatal编程技术网

Mysql 同时使用ORDER BY、GROUP BY和multiple SELECT

Mysql 同时使用ORDER BY、GROUP BY和multiple SELECT,mysql,Mysql,我有两张桌子 表用户 uid | username ---------------- 1 | brandon 2 | john 3 | nicole 表2.1.1-1-1-1 id | from | to | message | time ------------------------------------------- 1 | 1 | 2 | hi sister | 100 2 | 1 | 3 | h

我有两张桌子

表用户

uid  | username 
----------------
1    | brandon   
2    | john   
3    | nicole
表2.1.1-1-1-1

id   | from  | to | message      | time
-------------------------------------------
1    | 1     | 2  | hi sister    | 100
2    | 1     | 3  | hi brother   | 300
3    | 1     | 2  | hi again!    | 400
4    | 2     | 3  | lolz message | 600
(column time是一个实际的时间戳,我只是简化了这个示例)

“from”是用户的uid

“to”是用户的uid

我想从发送给特定用户的所有用户处获取最新消息

本例中的特定用户是

$logged_id = 2;
结果应返回id为3的行

我到目前为止有什么疑问

SELECT private_msgs.*, users.username FROM `private_msgs`, `users` 
WHERE private_msgs.to=$logged_id AND users.uid = private_msgs.from 
INNER JOIN (
  SELECT 
    from, max(time) as latest 
  FROM private_msgs 
  GROUP BY private_msgs.from
) r ON private_msgs.time = r.latest AND private_msgs.from = r.from
ORDER BY time DESC");
然而,我得到了错误

Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INNER JOIN ( SELECT from, max(time) as latest FROM private_msgs ' at line 3

查询中有几个错误。除了尾随逗号之外,
from
to
都是保留字,因此它们应该被引用:

SELECT pm.*, u.username
FROM `private_msgs` pm join
     `users` u
     on pm.`to` = $logged_id AND u.uid = pm.`from` INNER JOIN
     (SELECT `from`, max(time) as latest 
      FROM private_msgs 
      GROUP BY private_msgs.`from`
     ) r
    ON pm.time = r.latest AND pm.`from` = r.`from`
ORDER BY time DESC;

在这里,您将收到来自所有用户的最新消息。这是对您的answesr的查询

SELECT * FROM 
    (SELECT * FROM `user` a,` private_msgs` b 
     WHERE a.uid=b.from order by time DESC ) 
      t group by `from`

这个问题经常被问到。