在PHP MySQL中使用UNION创建消息系统

时间:2017-04-27 17:31:09

标签: php mysql

我正在尝试创建一个消息系统,我想显示我向其发送消息的用户列表,或者我收到一条消息。所以我可以拥有与之交互的用户列表 这是我的消息表结构

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或接收的时间。

1 个答案:

答案 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注入正确清理此变量!