0

私の問題の説明を簡単にするために、3 つのテーブルからデータを選択するために小さな SQL クエリを実行したとしましょう。

SELECT  blockTitre, ChampsType, ChampsNom
FROM form_builder
    LEFT JOIN block_champs
        ON formBuilderBId = blockId
    RIGHT JOIN ajout_champs
        ON ChampsId = formBuilderChId

結果を var_dump すると、次のようになります。

array (size=6)
  0 => 
    object(stdClass)[8]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'submit' (length=6)
      public 'ChampsNom' => string 'submit' (length=6)
  1 => 
    object(stdClass)[9]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'hidden' (length=6)
      public 'ChampsNom' => string 'page' (length=4)
  2 => 
    object(stdClass)[10]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'email' (length=5)
  3 => 
    object(stdClass)[11]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'prenom' (length=6)
  4 => 
    object(stdClass)[12]
      public 'blockTitre' => string 'Information général' (length=21)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'age' (length=3)
  5 => 
    object(stdClass)[13]
      public 'blockTitre' => string 'Misc' (length=4)
      public 'ChampsType' => string 'text' (length=4)
      public 'ChampsNom' => string 'nommm' (length=5)

私が欲しいのは、結果をblockTitreで再グループ化することです。

SQLステートメントを試しましたGROUP BYが、2行しか返されません(ロジックだと思います)!

blockTitreでグループ化されたすべての行を取得する方法をマスターしてください 。

前もって感謝します。

編集 :

次のようなものを取得する必要があります:

 0 =>
       'blockTitre' => string 'Misc' 
            'ChampsType' => string 'submit' 
            'ChampsNom' => string 'submit'
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'nommm' 
            'ChampsType' => string 'hidden' 
            'ChampsNom' => string 'page' 
  1 =>     
       'blockTitre' => string 'Information général' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'email' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'prenom' 
            'ChampsType' => string 'text' 
            'ChampsNom' => string 'age'
4

2 に答える 2

1

GROUP BYあなたの状況を説明するように動作します。一意の値のみが残ります:MiscInformation général. 他の列の値には、最初に表示される行が使用されます。実際、2行しか得られません。

あなたが探している出力は何ですか?通常GROUP BY、一意の値のみを取得するか、ある種のCOUNTing を実行するために使用します。

SQL は「フラットな」データ、つまり次のような構造しか提供できないことに注意してください。

data = {
    "misc": [{
        "row1",
        "row2"
    }],
    "info": [{
        "row1",
        "row2"
    }]
 }

結果セットを 1 行ずつ読み取ることによって、自分で行う必要があるものです。

于 2013-01-07T14:58:55.410 に答える
0

PDO::FETCH_GROUPPDOを使用しているかどうかを確認してください。

でグループ化された結果を取得するにはblockTitre、次のことを試してください(PDOを使用してクエリをすでに実行していると仮定します)。

$rows = $result->fetchAll(PDO::FETCH_OBJ | PDO::FETCH_GROUP);

詳細については、PHPのドキュメントをご覧ください。

これで、好きなようにグループをループできます。必ず

GROUP BY blockTitre

クエリで。

于 2013-01-07T15:26:52.910 に答える