MYSQL 类似数组的 SELECT 语句
Posted
技术标签:
【中文标题】MYSQL 类似数组的 SELECT 语句【英文标题】:MYSQL Array-like SELECT Statement 【发布时间】:2018-12-22 13:04:48 【问题描述】:希望一切都好。
在我在结果集/查询上使用 mysqli_fetch_all 后,我真的需要数据库查询/选择语句的帮助,这将为我的 php 数组提供正确的“设计”。
我有这两张桌子...
产品表:
ID Manufacturer Product_Name
-------------------------------------------------------------------------
1 Nike Air Max Talldress
2 Adidas High Voltage
库存表:
ID Product_ID Color Size Quantity
1 1 Black Medium 61
2 1 Black Large 26
3 1 Purple Small 37
4 1 Red XSmall 88
5 2 Green Medium 74
这就是我希望我的数组在我发送查询并使用 mysqli_fetch_all 之后的样子(我不知道它是否可能与 MYSQL 一起使用,也许在另一个数据库管理系统中?):
Array
(
[0] => Array
(
[Product_ID] => 1
[Manufacturer] => Nike
[Product_Name] => Air Max Talldress
[Options] => Array
(
[Black] => Medium, Large
[Purple] => Small
[Red] => XSmall
)
)
[1] => Array
(
[Product_ID] => 2
[Manufacturer] => Adidas
[Product_Name] => High Voltage
[Options] => Array
(
[Green] => Medium
)
)
)
如果可能,以下方法也可以使用:
一个 SELECT 语句,它为我提供特定 Product_ID 的所有颜色以及这些颜色的可用尺寸。我在 same 行/记录中也需要这个(不知何故我可以识别哪些尺寸属于正确的颜色)
当然,如果我不希望所有内容都在同一行中,那会更容易,但有人可能有一个聪明的解决方案或创造性的想法,如何在单行/记录中构造它。
// 尼奥
【问题讨论】:
您可能会发现 GROUP_CONCAT 很有帮助,尽管您需要拆分结果(PHP explode 应该为您做这件事)。 嘿。我试过了。 GROUP_CONCAT 将返回多个记录/行(每种颜色一个,以及按颜色分组的大小)。我需要以某种创造性的方式在单个记录/行中获取所有内容。 @CrazyNeo 您能否编辑您的问题以显示您尝试过的 SQL,特别是 GROUP_CONCAT,然后我会看看我能提供什么帮助。 @MandyShaw,请再次阅读我的评论(已编辑) @CrazyNeo 为什么不能以这样的方式对数据进行分组/连接以获得单行,并且将子数组的内容与 GROUP_CONCAT 连接起来以供 php 拆分?请显示不起作用的 SQL,我们可以尝试使其按您的意愿运行。 【参考方案1】:更新
select p.id, p.Manufacturer, p.Product_name, group_concat(`Color` separator ';') as `Color`
from
(
select pid, concat(`Color`, '-',
group_concat(`Size` separator ',')) as `Color`
from stock
group by pid, `Color`
) s, Products p
where p.Id = s.PId
group by p.id;
【讨论】:
您好@Sydel 感谢您的帖子。您的建议在一列中返回特定 ID 的所有颜色,并将所有尺寸加到另一列中的所有这些颜色中,这样我就无法确定哪些尺寸属于正确的颜色。 检查这是否对您有帮助:选择 p.Id, p.Manufacturer, p.Product_name, GROUP_CONCAT(DISTINCT CONCAT(s.color,'-',s.size) ORDER BY s.color SEPARATOR ';' ) 来自 Products p, Stock s where p.Id = s.Product_Id group by p.Id; 非常感谢你,我的朋友,你快到了。你能不能让它像这样工作:Black-Medium、Small、Large; (color-allsizes;color-allsizes) 而不是 Black-Medium;黑-小; Black-Large 那我可以接受你的解决方案【参考方案2】:我在此论坛之外收到了针对我的问题的提案。我应该看看像 Redis(键/值)这样的数据库。考虑到我想要什么,也许它比 MYSQL 更适合我。
有什么想法吗?
【讨论】:
以上是关于MYSQL 类似数组的 SELECT 语句的主要内容,如果未能解决你的问题,请参考以下文章