繁体   English   中英

从mysql表中获取多个关联的行

[英]Fetching mutiple associated rows from mysql table

我有一个叫做goods的桌子,看起来像这样。

id |  name   |   type       |    
1  |  honda  |   car        |  
2  |  bianci |   bike       |  
3  |  ferari |   car        |  
4  |  hurley |   motor bike |  
4  |  bar    |   motor bike | 

我试图从这个表中获取一个关联数组,其中数组的索引应该是type ,值应该是name 最终结果应该是这样的。

array("car"=>"honda", "bike"=>"bianci", "car"=>"ferrari", "motor bike"=>"hurley");

我尝试了SELECT name FROM goods AS type WHERE type IN ('car', 'bike', 'motor bike')但仍然给出了数组的结果索引type

您的查询应如下所示:

  SELECT GROUP_CONCAT(`name`) AS `brand`,
         `type` 
    FROM goods
   WHERE `type` IN ('car', 'bike', 'motor bike')
GROUP BY `type`

上述查询的结果如下:

name            |   type
-------------------------------
honda, ferari   |   car
bianci          |   bike
hurley, bar     |   motor bike

在您的PHP上将是这样的:

$result = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $result[$row['type']] = $row['brand'];
}
print_r($result);

由于您不能在数组上重复键,因此通过使用GROUP BY将类型和GROUP_CONCAT分组以将名称分组为单个字符串,我们可以得到接近您想要的结果:

array("car" => "honda, ferrari",
      "bike" => "bianci",
      "motor bike" => "hurley, bar"
     );

另一种方法是:

  SELECT `name`,
         `type` 
    FROM goods
   WHERE `type` IN ('car', 'bike', 'motor bike')

在您的PHP上将是这样的:

$result = array();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $result[$row['type']][] = $row['name'];
}
print_r($result);

使用此方法,您可以使用type作为键,使用数组作为值,使用foreach或任何其他循环可以轻松读取所有名称:

array("car" => array("honda", "ferrari"),
      "bike" => array("bianci"),
      "motor bike" => array("hurley", "bar")
     );

根据您的询问,如果您想通过SQL实现,那么您可以做的就是可以有更好的方法。 因此,在您的PHP代码中,您将以某种方式处理那些空值/空值。 不知道PHP。

select 
isnull(car,'') as car,
isnull(bike,'') as bike,
isnull([motor bike],'') as 'motor_bike' 
from
(
SELECT 
case when name in ('honda','ferari') then name end as car, 
case when name = 'bianci' then name end as bike,
case when name in ('bar','hurley') then name end as 'motor bike'
FROM goods 
) tab

(或)根据评论的直接方式

SELECT 
case when type = 'car' then name end as car, 
case when type = 'bike' then name end as bike,
case when type = 'motor bike' then name end as 'motor bike'
FROM goods 

这将导致

在此输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM