0

我是一名新手 MySQL 程序员,我正在尝试创建一个简单的网站,用户可以在彼此之间发送消息。

消息存储在一个名为 的表中message,带有日期、从用户到用户、文本、主题和索引。索引是主键,但我想按tou(对用户)部分对其进行排序。

我想知道是否可以JOIN在一个表中使用 SQL 语法对其进行排序。我将遍历所有消息并每次运行此查询以查找匹配项:

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

提前致谢。

4

1 回答 1

1

这样做。

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

于 2013-09-13T23:24:59.470 回答