1

question(id_question, name_question, text_question) と choice(id_choice, text_choice, id_question) の 2 つのテーブルがあります。

PHPコードでの私のクエリは次のとおりです。

$query =    ' SELECT q.name_question, q.text_question, c.text_choice'.
                        ' FROM question as q '.
                        ' LEFT JOIN choice as c ' .
                        ' ON q.id_question = c.id_question ' ;

結果を確認すると:

foreach ($db->loadObjectList() as $obj){

    echo $obj->name_question." ".$obj->text_question." ".$obj->text_choice."</br>";

}

私が得るものは:

Q1 Q1_text C1
Q1 Q1_text C2
Q1 Q1_text C3

Q2 Q2_text C4
Q2 Q2_text C5

私が欲しいのは:

Q1 Q1_text C1
           C2
           C3

Q2 Q2_text C4
           C5

それで、SQLクエリでそれを行う方法はありますか? そして、PHPでクエリ結果を希望どおりに表示する方法は?

ご協力いただきありがとうございます。

4

1 に答える 1

0

これは、次の 2 つの方法で解決できます。

SQL のみを使用:

SQL フィドル: http://www.sqlfiddle.com/#!2/19d46/14

  SELECT case
       when c.text_choice = (select min(text_choice) from choice c2 where c2.id = q.id) then name_question
       else ""
       end as name_question,

       case
       when c.text_choice = (select min(text_choice) from choice c2 where c2.id = q.id) then text_question
       else ""
       end as  text_question,
       c.text_choice 

FROM question as q LEFT JOIN choice as c  
ON q.id = c.id
order by q.id, c.text_choice;

結果:

Q1  Q1_text C1
C2
C3
Q2  Q2_text C4
C5
C6

PHP も使用します。

最初の表示では、これは PHP を介して簡単に実行でき、name_question で結果を並べ替えることができます。

$query =    ' SELECT q.name_question, q.text_question, c.text_choice'.
                        ' FROM question as q '.
                        ' LEFT JOIN choice as c ' .
                        ' ON q.id_question = c.id_question '  order by q.name_question;

結果を表示する場合:

$current_nameQuestion = "";    
foreach ($db->loadObjectList() as $obj){

        if($current_nameQuestion==$obj->name_question)
        {
           echo "       ".$obj->text_choice."</br>";
        }
        else
        {
           echo $obj->name_question." ".$obj->text_question." ".$obj->text_choice."</br>";
           $current_nameQuestion = $obj->name_question;
        }       
    }

上記の PHP コードは、name_questionまだ出力されていない場合にのみ 2 つの列の値を出力します。

于 2013-05-23T12:09:03.487 に答える