0

2つのテーブルがあります。

列ID、forumID、title、content、unixtimeを持つ「スレッド」

列ID、threadID、content、unixtimeの「コメント」

これらの2つのテーブル内のすべての行をUNIX時間に基づいて並べ替えるが、同じ「threadID」を2回表示しないmysqlクエリを実行したいと思います。

次のクエリは2つのテーブルをマージして並べ替えますが、スレッドの重複を削除することはできません。GROUP BYとDISTINCTを試してみましたが、うまくいきませんでした。

(SELECT unixtime, ID, threadID FROM comments)
UNION
(SELECT unixtime, ID, forumID FROM threads)
ORDER BY unixtime DESC

フォーラムのフロントページを表示するためのものであるため、同じスレッドを複数回表示することは意味がありません。

編集:最新のコメントと最新のスレッドの両方を表示したいと思います。

4

3 に答える 3

1
SELECT unixtime, ID, type, type_id
FROM (( SELECT unixtime, ID, 'comment' AS type, threadID, forumID
        FROM (  SELECT unixtime, ID, threadID
                FROM comments
                ORDER BY unixtime DESC) AS h
        GROUP BY threadID)
        UNION ALL
      ( SELECT unixtime, ID, 'thread', ID, forumID
        FROM threads)
        ORDER BY unixtime DESC) AS h2
GROUP BY threadID
ORDER BY unixtime DESC

私はいくつかのものを変更しました。フォーラム ID なのかスレッド ID なのか知りたいと思いますか?

于 2012-05-26T10:16:55.887 に答える
0

これは、一意のthreadIDのみを取得するのに役立ちます

(SELECT forumID, ID, unixtime FROM threads)
UNION
(SELECT distinct(threadID), ID, max(unixtime) FROM comments GROUPBY threadID)
ORDER BY unixtime DESC
于 2012-05-26T10:11:30.897 に答える
0

参加するためのキーがない場合の簡単な解決策:

   Select DISTINCT tbl.unixtime from
    (
    (SELECT unixtime, ID, threadID FROM comments)
    UNION
    (SELECT unixtime, ID, forumID FROM threads)
    ORDER BY unixtime DESC))
    As tbl
于 2012-05-26T10:02:59.390 に答える