sql >> データベース >  >> RDS >> Mysql

MySQLの左結合クエリで重複する列を削除します

    これは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つの列の値を出力します。 まだ出力されていません。




    1. 簡単なレビューと5つ星の評価システムを構築するにはどうすればよいですか?

    2. MySQLが比較よりも大きいインデックスを使用しないのはなぜですか?

    3. PostgresJSONデータ型Railsクエリ

    4. OracleODBC接続でのパラメータの使用