В запросе 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, чтобы получить все темы, а затем отсортировать их. на основе последнего сообщения (при условии, что сообщения с более высокими идентификаторами более свежие:
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 |
+----+--------+-------------+
Это явно неправильно, так как поток «Информация» должен быть сверху. Казалось бы, что использование DISTINCT
приводит к удалению дубликатов сверху вниз, поэтому остаются только последние строки. Это вызывает некоторые проблемы при сортировке.
Так ли это, или я анализирую что-то не так?