我正在尝试创建一个消息系统,我想显示我向其发送消息的用户列表,或者我收到一条消息。所以我可以拥有与之交互的用户列表 这是我的消息表结构
msgID sentBy sentTo message sentTime
1 3 1 Hii B 1493306882
2 3 1 Hi A 1493309615
1 1 3 Hmm 1493306882
2 1 3 Yeah 1493309615
我试过的查询是
(SELECT * FROM user_message LEFT JOIN users ON user_message.sentTo=users.userID
WHERE user_message.sentBy='".$_SESSION['userid']."' GROUP BY sentTo) UNION
(SELECT * FROM user_message LEFT JOIN users ON user_message.sentBy=users.userID
WHERE user_message.sentTo='".$_SESSION['userid']."' GROUP BY sentBy)
问题:使用上面的查询,它会向用户显示我发送msg或接收的时间。
答案 0 :(得分:2)
问题是您的个人选择查询正在选择所有列,而只按一列进行分组。您可以通过仅选择实际需要的列并将这些列添加到组子句来更正此问题。
此外,您可以向联合添加distinct
,以便从返回的表中返回一组不同的结果。此外,您可以在选择查询中使用distinct
而不是群组,但这是另一个讨论。
假设您的查询已经执行了您需要执行的操作,您可以对您选择的字段以及您要分组的字段进行少量更改。我也扔了union distinct
。
(SELECT users.userName FROM user_message LEFT JOIN users ON user_message.sentTo=users.userID
WHERE user_message.sentBy='".$_SESSION['userid']."' GROUP BY users.userName)
UNION DISTINCT
(SELECT users.userName FROM user_message LEFT JOIN users ON user_message.sentBy=users.userID
WHERE user_message.sentTo='".$_SESSION['userid']."' GROUP BY users.userName)
在旁注中,我发现您已将$ _SESSION [' userid']直接放入您的查询中。确保对sql注入正确清理此变量!