[英]MySQL: fetch a row and multiple related rows - possible?
假設我有一張表格:“ cars ”,其中包含3個字段:id,品牌,費用。
還有第二個表:“ models ”,其中包含3個字段:id,brand,model_name。
每個“汽車”行可以具有多個相關的“模型”行。
是否可以執行sql-select,其輸出如下所示?
編輯:我使用PHP進行數據庫查詢
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
)
)
)
)
您需要向models表添加外鍵關系,例如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,品牌和成本會被重復覆蓋,但這沒關系,因為它們被相同的信息覆蓋。 我不太清楚代碼的清潔度,但這是基本思想。
嘗試這個:
查詢:
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代碼中,您可以處理MODEL,MID和MBrand(通過使用explode )
$modelArray = explode(" ,", $row["MODELS");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.