我是一个新手MySQL程序员,我正在尝试创建一个简单的网站,用户可以在彼此之间发送消息。
消息存储在一个名为 message
的表中,其中包含从用户到用户的日期、文本、主题和索引。索引是主键,但我想按tou
(对用户)部分对其进行排序。
我想知道我是否可以在一个表中使用 SQL JOIN
语法对其进行排序。我将遍历所有消息,每次都运行此查询以查找匹配项:
SELECT message.text
FROM message
LEFT JOIN message
ON message.tou = [this one's to users]
我不是一个非常高级的程序员,而且我不熟悉JOIN
语法,所以如果可能的话,请告诉我如何以我想要的方式使用它。我知道有很多这样的问题,所以如果有一个可以解决我的问题,也请重定向我。
如果我不清楚,也告诉我。
我正在尝试获取以下输出:
如果message
具有以下行:
INDEX | TOU | FROMU | TEXT
1 | u1, u2 | u4 | hello from u4
2 | u1, u3 | u3 | hello from u3
3 | u1, u2 | u5 | hello from u5
^ organize this row
我希望它组织它,以便它像这样排列它:
TOU | TEXT
u1, u2 | hello from u4
| hello from u5
u1,u3 | hello from u3
提前谢谢。
这样做
了。
SELECT tou, text
FROM (
SELECT IF(tou = @lasttou, '', tou) tou, text, @lasttou := tou
FROM (SELECT tou, text
FROM message
ORDER by tou) message,
(SELECT @lasttou := NULL) vars
) x
ORDER BY
按所需顺序获取行。然后,它使用 @lasttou
来防止在跨行重复时显示相同的tou
值。
用户界面的应用程序语言中实现这种重复抑制,而不是在 SQL 中。
SQLFIDDLE