使用SQL join对同一个表的元素进行排序

时间:2013-09-13 22:59:57

标签: php mysql sql join

我是一名新手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

提前致谢。

1 个答案:

答案 0 :(得分: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