php - 使用 SQL 连接对同一个表的元素进行排序

标签 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 语法,所以如果可能的话,请告诉我如何按照我想要的方式使用它。我知道有很多这样的问题,所以如果有一个可以解决我的问题,请也将我重定向到该问题。

如果我不清楚,请告诉我。

我正在尝试获得以下输出:

如果消息具有以下行:

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

关于php - 使用 SQL 连接对同一个表的元素进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18796479/

相关文章:

php - 等时间间隔后从数据库中获取数据

php - Mysql显示所有记录

php - 想要删除PHP表中数据库中的用户

mysql - 高效的 MySQL 模式,对巨大的数据集进行分区(7.300.000.000 行和大约 80 GB 的数据)

mysql - 自引用表,单个查询中的父/子插入语句

Mysql:如果可能的话,拆分表是否更好?

php - sitemap.xml 是用页面加载还是仅由机器人加载?

wordpress - PHP-FPM 为单个请求使用 40% CPU

sql - 加快查询速度,一张大表和一张小表的简单内部连接

大约 30 分钟后 PHP session 变量为空