あなたはそれを達成するためにSELECT CASE、JOINとサブクエリを使用します。
EDIT
始めから始まります。私はあなたのテーブルの名前を知らないので、私はいくつかの偽の名前を書くでしょう。あなたは2つのテーブルを持っていると言っています.1つはトピック用、もう1つは応答用です。また、いくつかのカテゴリについて述べましたが、どのように動作するかは指定されていないため、トピックの表の列として記述します。
Table T = Topic's table
+ Table R = Reply's table
はまた、我々は我々の行の登録日を保存registry_date
TIMESTAMP列を考えます。解答(回答)がある
- :
あなたのようないくつかの情報を取得する必要があります最後の変更によってあなたの順序を達成するために?
- もしそうなら、最新の回答 の登録日は何ですか?
最後の返信を検索して両方の質問に回答できます。あなたのサブクエリになります
SELECT R.topicID, R.registry_date FROM R GROUP BY R.topicID ORDER BY R.registry_date DESC
。しかし、あなたのORDER BYクエリでそれを必要とするので、その結果をあなたのトピックのテーブルにジョインする必要があります。
SELECT T.title, T.category FROM T LEFT JOIN {subquery} AS Rs ON T.ID=Rs.topicID GROUP BY T.ID
それはまだ注文はありません。サブクエリ結果 "Rs"を呼び出したことに注意してください。 ここではCASEを使用します。私が前に書いたものとは違って、SELECT CASEを行う代わりに、ORDER BY CASEを試してみるでしょうか?それは簡単です。
まず、CASEクエリをマウントします。
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END
私たちの最初の条件付きチェックは何か答えがあるかどうかをチェックします。空欄の場合は、トピックの登録日を使用します。入力された場合は、返信の登録日を使用します。今、私たちはこのような、当社のORDER上のCASEクエリを適用します。
ORDER BY {CASE} DESC
あなたはおそらく我々がSELECTでそれを取得する必要があります最終変更日の情報が欲しいと。ここでもCASEクエリを使用できます。
SELECT
T.title,
T.category,
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END AS `last_change`
FROM T
LEFT JOIN (
SELECT
R.topicID,
R.registry_date
FROM R
GROUP BY R.topicID
ORDER BY R.registry_date DESC
) AS Rs ON Rs.topicID=T.ID
GROUP BY T.ID
ORDER BY
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END DESC
PS:あなたがここにあなた自身の "WHERE" 文を向上させることができます
SELECT T.title, T.category, {CASE} AS `last_change` (...)
その後、私たちのクエリは次のように終わります。あなたが尋ねたのと同じように
、例えば、WHERE T.category='color'
SELECT
T.title,
T.category,
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END AS `last_change`
FROM T
LEFT JOIN (
SELECT
R.topicID,
R.registry_date
FROM R
GROUP BY R.topicID
ORDER BY R.registry_date DESC
) AS Rs ON Rs.topicID=T.ID
WHERE T.category='color'
GROUP BY T.ID
ORDER BY
CASE
WHEN Rs.registry_date IS NULL THEN T.registry_date
ELSE Rs.registry_date
END DESC
何かが欠けている場合は私に知らせてください。
トピックには返信がない可能性があります。 –