2016-05-16 63 views
0

這是我的代碼的例子,它從兩個mysql表中獲取信息,相當容易。無法找出左邊的連接從左邊的表中獲取所有內容,並且不會在右邊的MYSQLI中重複結果

一個表包含實現,另一個表包含實現,另一個表包含實現。相關性左連接將realisations.id = realisations_kind.realisation_id,我的實際代碼,沒有左連接,我一直在做這只是一個骯髒的方式。

 $s = $mysqli->prepare("SELECT id, name FROM realisations"); 
     $s->execute(); 
     $s->bind_result($id, $name); 
     $s->store_result(); 
     while($s->fetch()) 
     { 
      /***/ 
      $si = $mysqli->prepare("SELECT kind FROM realisations_kind WHERE realisation_id = ?"); 
      $si->bind_param('i', $id); 
      $si->execute(); 
      $si->bind_result($kind); 
      $si->store_result(); 
      while($si->fetch()) 
      { 
       if(isset($kind)) { 
        $arrayKind[] = $kind; 
       } 

      } 

      $return[] = array('id' => $id, 'name' => $name, 'kind' => $arrayKind); 
      $arrayKind = null; 
      /***/ 
     } 

這將輸出此陣列

Array 
(
    [0] => Array 
     (
      [id] => 1 
      [name] => Building 1 
      [kind] => Array 
       (
        [0] => 0 
        [1] => 1 
       ) 

     ) 

    [1] => Array 
     (
      [id] => 2 
      [name] => Building 2 
      [kind] => Array 
       (
        [0] => 1 
       ) 

     ) 

    ..................more 

,從而可以看到我得到在索引0密鑰「之類的」,這得到了2分的結果和在索引1處得到了「一種」 1分的結果,這是正確的結果,因爲這個表有3個記錄,兩個分配給id1,另一個分配給id2。

我一直在試圖通過左連接和組sql語句做到這一點,但我無法找到如何做到這一點,我在過去幾次做過,但我忘了。現在,我有點愚蠢地問這樣的基本事情。

LEFT JOIN左表的結果中的所有行的結果,但重複右表或者如果它,我設置組從右側刪除重複項,但不打印出來從左表中的所有結果,只給第一:(

回答

1

當然LEFT JOIN給人重複在左表,這是加入的本質。SQL不會返回嵌套的表格,所有被合併成一個單一的表,你必須構建在PHP中的數據。

SELECT `r`.`id`, `r`.`name`, `k`.`kind` 
FROM 
    `realisations` `r` 
LEFT JOIN 
    `realisations_kind` `k` 
ON `k`.`realisation_id` = `r`.`id` 
; 

PHP可以有類似的東西

while($s->fetch()) 
{ 
    if(!isset($data[$id])) 
    { 
    $data[$id] = 
    [ 'id' => $id, 
     'name' => $name, 
     'kind' => [$kind] 
    ] 
    } 
    else 
    { 
    $data[$id]['kind'][] = $kind; 
    } 
} 

如果您想要一個基於零的數值數組,只需在循環後執行$data = array_values($data)即可。

+0

洛爾我需要思考5分鐘它是如何工作的,但它非常簡單。謝謝。怎麼樣的SQL語句是可以通過SQL來做到這一點? – Cameleon

+0

有什麼可能?嵌套數據是不可能的。 MS Access有一些UI功能來顯示嵌套的數據。但它不是SQL功能。 –

+0

好的,再次感謝。 – Cameleon