在 MySQL 查询中,使用该DISTINCT
选项时,是否ORDER BY
在删除重复项后应用?如果没有,有没有办法让它这样做?我认为这会导致我的代码出现一些问题。
编辑:
这里有一些关于是什么导致我的问题的更多信息。我明白,乍一看,这个顺序并不重要,因为我正在处理重复的行。但是,情况并非完全如此,因为我使用的INNER JOIN
是对行进行排序。
假设我有一个论坛线程表,其中包含以下数据:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 1 | 1 | Information |
| 2 | 1 | FAQ |
| 3 | 2 | Support |
+----+--------+-------------+
我在另一个表中也有一组帖子,如下所示:
+----+----------+--------+---------+
| id | threadid | userid | content |
+----+----------+--------+---------+
| 1 | 1 | 1 | Lorem |
| 2 | 1 | 2 | Ipsum |
| 3 | 2 | 2 | Test |
| 4 | 3 | 1 | Foo |
| 5 | 2 | 3 | Bar |
| 6 | 3 | 5 | Bob |
| 7 | 1 | 2 | Joe |
+----+----------+--------+---------+
我正在使用以下 MySQL 查询来获取所有线程,然后根据最新帖子对它们进行排序(假设具有更高 id 的帖子更新:
SELECT t.*
FROM Threads t
INNER JOIN Posts p ON t.id = p.threadid
ORDER BY p.id DESC
这有效,并生成如下内容:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 1 | 1 | Information |
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 1 | 1 | Information |
| 1 | 1 | Information |
+----+--------+-------------+
但是,如您所见,信息是正确的,但存在重复行。我想删除这样的重复项,所以我SELECT DISTINCT
改用了。但是,这产生了以下结果:
+----+--------+-------------+
| id | userid | title |
+----+--------+-------------+
| 3 | 2 | Support |
| 2 | 1 | FAQ |
| 1 | 1 | Information |
+----+--------+-------------+
这显然是错误的,因为“信息”线程应该在顶部。似乎 usingDISTINCT
会导致从上到下删除重复项,因此只剩下最后一行。这会导致排序中的一些问题。
是这种情况,还是我分析错误?