告诉我sql

时间:2015-12-27 05:30:43

标签: sql

我有一张这样的桌子。

表名称:消息

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'];
}`

但如果mfrommtomtomfrom相等,我只希望显示一个结果。例如mfrom =amto=bmfrom=bmto=a。我想只显示一个像他们这样的结果

mid | mfrom | mto | msg 
-------------------------
2   |  b    |  a  | hello
4   |  c    |  a  | fine

请告诉我查询。

1 个答案:

答案 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”。