[英]PHP only display rows from a mysql table that are associated with User ID
[英]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.