2013-01-07 61 views
0

請簡化我的問題的解釋,讓我們說,我做了一個小的SQL查詢,以便從三個表中選擇數據:PHP中使用LEFT時如何GROUP BY結果數組JOIN

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,但它只返回兩行(這是我認爲的邏輯)!

請大家掌握如何做,得到所有行按分組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' 

回答

1

GROUP BY作品。它將只留下唯一的值:MiscInformation général。它將採取第一行看到的其他列的值。所以確實,你只會得到2行。

您要查找的輸出是什麼?通常,您使用GROUP BY來獲取唯一值,或者執行某種COUNT ing。記住

記住,SQL只能給你「平」的數據,也就是如下的結構:

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

的東西,必須通過讀取一行結果集線做自己。

+0

是的但我不想只得到它看到的第一行,我需要所有的主題。請問可以嗎? –

+0

如果你想要所有的行,不要使用「GROUP BY」。你爲什麼使用'GROUP BY'?你想讓你的結果集看起來像什麼? – Halcyon

+0

請你能看到編輯?非常感謝你 –

0

如果您使用的是PDO,請查看PDO::FETCH_GROUP

提取您的結果通過blockTitre分組,試試這個(假設你已經執行與PDO查詢):

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

更多信息,可以發現in the PHP docs

現在,您可以循環訪問各個組,然而您喜歡。只要確保在您的查詢中有

GROUP BY blockTitre 

+0

我正在使用MySQLi。請問什麼是相同的? –

+0

剛剛查看了文檔,它沒有出現在MySQLi中的等價物。你可以遍歷'$ res-> fetchAll()'的結果集並自己分組。 – Bojangles