0

これら 2 つのクエリをマージして一度に結果を取得する方法がわかりません。

        $q1 = "SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score 
            FROM questions_and_exercises q, `lesson-question` lq 
            LEFT JOIN answers a ON (a.uid=? AND a.qid=lq.qid)
            LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id)
            WHERE q.id=lq.qid AND lq.lid=?";
        $q2 ="SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score
             FROM questions_and_exercises q,
             `questions from-to` qft
            LEFT JOIN answers a ON (a.uid=? AND a.qid=qft.qid)
            LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id)
            WHERE q.id=qft.qid AND qft.to_uid=?";

提案?前もって感謝します

4

2 に答える 2

1

この問題にはUNIONを使用してください。

UNIONただし、この場合、必要さえないと思います:

$q1 = "SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score 
        FROM questions_and_exercises q, `lesson-question` lq 
        LEFT JOIN answers a
        ON a.qid=lq.qid
        LEFT JOIN `answer_chk_results` acr 
        ON acr.aid=a.id
        WHERE q.id=lq.qid AND a.uid = ? (lq.lid = ? OR qtf.to_uid = a.uid)";

これら 2 つの結果をまとめて複数の行に分割します。

$q1 = "SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score 
        FROM questions_and_exercises q, `lesson-question` lq 
        LEFT JOIN answers a ON (a.uid=? AND a.qid=lq.qid)
        LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id)
        WHERE q.id=lq.qid AND lq.lid=?
        UNION # ALL
        SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score
         FROM questions_and_exercises q,
         `questions from-to` qft
        LEFT JOIN answers a ON (a.uid=? AND a.qid=qft.qid)
        LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id)
        WHERE q.id=qft.qid AND qft.to_uid=?";

同一の行をマージするかどうかに応じて、UNIONまたはを使用します。では、2 つの の列数が同じである必要があり、最初の s エイリアスが使用されUNION ALLます。UNIONSELECTSELECT

次のように最後のクエリを緩和できます。

        SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score
        FROM questions_and_exercises q,
        `questions from-to` qft
        LEFT JOIN answers a 
        ON a.qid=qft.qid
        LEFT JOIN `answer_chk_results` acr 
        ON acr.aid=a.id
        WHERE q.id=qft.qid AND qft.to_uid=? AND qtf.to_uid = a.uid

基本的には同じ値なので、 と比較してから と比較すればto_uid十分です。で比較したのと同じ結果です。?to_uiduidON

于 2012-07-30T06:50:35.520 に答える
0

ユニオンオールを使う

$q1 = "SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score  
            FROM questions_and_exercises q, `lesson-question` lq  
            LEFT JOIN answers a ON (a.uid=? AND a.qid=lq.qid) 
            LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id) 
            WHERE q.id=lq.qid AND lq.lid=? union all
            SELECT q.id, q.content, a.id, a.content, a.addDT, acr.score 
             FROM questions_and_exercises q, 
             `questions from-to` qft 
            LEFT JOIN answers a ON (a.uid=? AND a.qid=qft.qid) 
            LEFT JOIN `answer_chk_results` acr ON (acr.aid=a.id) 
            WHERE q.id=qft.qid AND qft.to_uid=?"; 
于 2012-07-30T06:51:28.627 に答える