2016-10-18 5 views
0
SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description 
FROM questions q 
LEFT JOIN (
    SELECT question_id, crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer 
    FROM answers 
    GROUP BY question_id 
    ORDER BY crdate DESC 
) a ON q.uid = a.question_id 
WHERE q.deleted = 0 AND q.answers > 0 

を登録しよう。このクエリは、Min crdateを選択します。どのように私はそれを変更すべきですか?第二のテーブルからの最大時間を選択し、私は、最初のテーブルから2番目のテーブルからすべてのテキストと回答の<strong>MAX</strong>のcrdateをUID、タイトルとカテゴリIDを選択したい

UPD テーブルの質疑応答があります。テーブルの名前として、私は質疑応答を選択します。 1つの質問にいくつかの回答があるかもしれません。 1つの変数にすべての回答を連結したい(後でフルテキスト検索の変数を連結する)し、最後の回答のcrdateを選択する。

答えて

1

この

SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description 
FROM questions q 
LEFT JOIN (
    SELECT question_id, max(crdate) as crdate, GROUP_CONCAT(text SEPARATOR '|| ') answer 
    FROM answers 
    GROUP BY question_id 
    ORDER BY crdate DESC 
) a ON q.uid = a.question_id 
WHERE q.deleted = 0 AND q.answers > 0 
GROUP BY q.uid 
+0

thx、max(crdate)がALLテーブルから最大値を返すと考えました – Dev

+0

正しい結果が得られていますか? – Madhivanan

+0

それは奇妙なことですが、そうです – Dev

1

2本使用してみてくださいは、加入:

SELECT q.uid, q.title, q.category_id, CONCAT(CONCAT(q.text,'\n'),a.answer) as description 
FROM questions q LEFT JOIN 
    (SELECT a.question_id, a.crdate, GROUP_CONCAT(a.text SEPARATOR '|| ') answer 
     FROM answers a JOIN 
      (SELECT a2.question_id, MAX(a2.crdate) as maxcr 
      FROM answers a2 
      GROUP BY a2.question_id 
      ) a2 
      ON a2.question_id = a.question_id and a2.maxcr = a.crdate 
     GROUP BY question_id 
    ) a 
    ON q.uid = a.question_id 
WHERE q.deleted = 0 AND q.answers > 0 
GROUP BY q.uid; 

最も内側のサブクエリが最大の質問のための答えの日付を作成します取得します。中間のサブクエリは、あなたが望むものを行い、答えをつなぎ合わせます。

GROUP BYが何をしているのかはっきりしていません。本当に必要ですか?なぜ集計機能を持たないGROUP BYを使用していますか?外部SELECTの他の列にはどのような値を使用する必要がありますか?あなたの質問はこれらの問題に対処するのに十分な情報を提供していませんが、最新のcrdateの回答を得た後も依然として疑わしいと思われます。

+0

あなたは正しいです、グループでは必要ありません。私は私の質問を更新しました。 – Dev

関連する問題