我有一张这样的桌子。
表名称:消息
mid | mfrom | mto | msg
------------------------
1 | a | b | hi
2 | b | a | hello
3 | a | c | how are you
4 | c | a | fine
我可以通过
显示所有行`$sql = mysql_query("SELECT *
FROM message
WHERE mto = '$to'
OR mfrom = '$to';");
while($row = mysql_fetch_array($sql))
{
echo $row['msg'];
}`
但如果mfrom
和mto
或mto
和mfrom
相等,我只希望显示一个结果。例如mfrom =a
和mto=b
或mfrom=b
和mto=a
。我想只显示一个像他们这样的结果
mid | mfrom | mto | msg
-------------------------
2 | b | a | hello
4 | c | a | fine
请告诉我查询。
答案 0 :(得分:0)
您的问题不明确,因为您的“查询”似乎有误(“mfrom和mto或mto和mfrom相等”似乎不正确)。
尽管如此,当您将表格命名为“消息”时,我猜您希望每条消息一次,即使它在表格中出现两次。
你可以做的是从表中“两次”查询,然后使用更大的id:
SELECT first.* FROM message AS first LEFT JOIN message AS second
ON first.mfrom = second.mto AND first.mto = second.mfrom
WHERE first.mid > second.mid OR second.mid is NULL;
这会为您提供所需的结果。它还会为您提供任何没有“合作伙伴”行的消息。
如果只想匹配消息,可以删除“OR second.mid is NULL”。