2012-08-10 42 views
0

比方說,我有一個表:「汽車」與3個領域:id,品牌,成本。MySQL:獲取一行和多個相關行 - 可能嗎?

還有第二個表格:「模型」有3個字段:id,brand,model_name。

每個「汽車」行可以有多個相關的「模型」行。

是否有可能做一個sql-select的輸出如下所示?

編輯:我使用PHP數據庫querys

array(
    [0] => array(
    [id] => 1 
    [brand] => mercedes 
    [cost] => 1000 
    [models] => array(
     [0] => array(
     [id] => 1 
     [brand] => mercedes 
     [model_name] => slk 
     ) 
     [1] => array(
     [id] => 2 
     [brand] => mercedes 
     [model_name] => clk 
     ) 
     [2] => array(
     [id] => 3 
     [brand] => mercedes 
     [model_name] => whatever 
     ) 
    ) 
) 
) 

回答

0

您需要添加一個外鍵關係模型表,說car_id。然後:

SELECT * FROM cars JOIN models ON car_id = models.id; 

這將輸出類似於您正在查找的內容。

假設你使用的是PHP,使用輸出:

$query= "SELECT * FROM cars JOIN models ON car_id = models.id"; 
$r= @mysqli_query($dbc, $query); 
while ($row= mysqli_fetch_array($r, MYSQLI_ASSOC)) { 
    $carstuff['id']=$row[id]; 
    $carstuff['brand']=$row[brand]; 
    $carstuff['cost']=$row[cost]; 
    $carstuff[$row['models']][]=$row['model_name']; 
} 

var_dump($carstuff); 

注意,該ID,品牌和成本重複的覆蓋,但是這是可以的,因爲它們都具有相同的信息覆蓋。我不太清楚代碼的清潔程度,但這是最基本的想法。

+0

肯定的,但在這種情況下,我得到每個型號齊全陣列(完整的方式與汽車的全部數據和模型),但我想有這一切在一個陣列 – jacksbox 2012-08-10 17:54:11

+0

如何你在訪問數據庫嗎? PHP? – Sablefoste 2012-08-10 17:55:04

+0

哦,對不起 - 是的,我使用PHP – jacksbox 2012-08-10 17:55:55

0

試試這個:

查詢:

SELECT c.ID, c.brand,c.cost, GROUP_CONCAT(model_name SEPARATOR '","') as models 
, GROUP_CONCAT(m.ID SEPARATOR ',') as MID 
, GROUP_CONCAT(m.brand SEPARATOR '","') as mbrand 
FROM cars c 
LEFT OUTER JOIN model m 
ON m.brand = c.brand 
GROUP BY brand; 

輸出:

ID BRAND  COST MODELS   MID MBRAND 
1 audi  1000 m11","m22  4,5 audi","audi 
1 mercedes 1200 m1","m2","m3  1,2,3 mercedes","mercedes","mercedes 

現在,在你的PHP代碼,你可以處理模型,MID和MBrand (通過使用explode

$modelArray = explode(" ,", $row["MODELS"); 

SQLFIDDLE