0

ID、ブランド、コストの3つのフィールドを持つ「」という1つのテーブルがあるとします。

2番目のテーブルがあります:id、brand、model_nameの3つのフィールドを持つ「 models 」。

各「車」の行には、複数の関連する「モデル」の行を含めることができます。

出力が次のようになっている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
       )
     )
  )
)
4

2 に答える 2

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 コードで MODEL、MID、および MBrand を処理できます (explode を使用し)

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

SQLFIDDLE

于 2013-11-28T11:46:39.277 に答える
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、ブランド、コストは繰り返し上書きされますが、同じ情報で上書きされるので問題ありません。コードのクリーン度についてはよくわかりませんが、それが基本的な考え方です。

于 2012-08-10T17:49:52.660 に答える