繁体   English   中英

是否可以将这两个SQL语句合并为一个?

[英]Is it possible to combine these two SQL statements into one?


我正在使用这两个MySQL语句来获取两个用户之间的所有消息,但是稍后在代码中处理数据时遇到了一个很大的问题,因为它不是按ID顺序排列的。 有什么方法可以组合这些语句并按ID排序结果?

$sql = "SELECT * FROM messages WHERE sender='" . $username . "' AND receiver='" . $chatPartner . "'"

$sqlTwo = "SELECT * FROM messages WHERE sender='" . $chatPartner . "' AND receiver='" . $username . "'"

从本质上讲,我需要两个人之间每次出现一条消息,但都按ID排序。 截至目前,我正在加入数组以获取我的完整列表,但这并不是按ID排序。

SELECT * FROM messages 
WHERE (sender='" . $username . "' AND receiver='" . $chatPartner . "'")
OR (sender='" . $chatPartner . "' AND receiver='" . $username . "'")
ORDER BY id DESC

将两者合并为1个查询怎么样?

$sql = "SELECT * FROM messages WHERE (sender=" . $username . " OR sender =". $chatPartner .") AND (receiver=" . $chatPartner . " OR receiver=" . $username .") ORDER BY id"

您还可以使用行构造函数编写@dtj答案的较短版本。

SELECT *
FROM messages
WHERE (sender, receiver) IN (($username, $chatPartner),($chatPartner, $username))
ORDER BY id DESC

在我看来,它在代码中看起来更好一些,并使其更具可读性,但是请记住,它并不能提高执行性能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM