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 |
+----+--------+-------------+
「情報」スレッドが一番上にあるはずなので、これは明らかに間違っています。を使用するDISTINCT
と、重複が上から下に削除されるように思われるため、最後の行のみが残ります。これにより、並べ替えでいくつかの問題が発生します。
これは事実ですか、それとも物事を間違って分析していますか?