Применяется ли ORDER BY до или после DISTINCT?

В запросе 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приводит к удалению дубликатов сверху вниз, поэтому остаются только последние строки. Это вызывает некоторые проблемы при сортировке.

Так ли это, или я анализирую что-то не так?

5
задан Alexis King 5 June 2012 в 22:16
поделиться