Php MySQL:获取一行和多个相关行-可能吗?

Php MySQL:获取一行和多个相关行-可能吗?,php,mysql,database,arrays,select,Php,Mysql,Database,Arrays,Select,假设我有一个表:“汽车”有3个字段:id、品牌、成本 还有第二个表:“型号”,包含3个字段:id、品牌、型号名称 每个“cars”行可以有多个相关的“models”行 是否可以执行输出如下所示的sql选择 编辑:我使用PHP进行数据库查询 array( [0] => array( [id] => 1 [brand] => mercedes [cost] => 1000 [models] => array( [

假设我有一个表:“汽车”有3个字段:id、品牌、成本

还有第二个表:“型号”,包含3个字段:id、品牌、型号名称

每个“cars”行可以有多个相关的“models”行

是否可以执行输出如下所示的sql选择

编辑:我使用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\u 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
输出:

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 (使用)


是的,但在这种情况下,我会获得每个车型的完整阵列(完整意味着包含来自汽车和该车型的所有数据),但我希望将所有数据都放在一个阵列中。您如何访问数据库?PHP?