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 语句的主要内容,如果未能解决你的问题,请参考以下文章

sql中的insert语句中的select语句返回多行

MySQL SELECT 语句,其中值在数组中

MYSQL 对类似查询的回复不同

带有php数组的Mysql SELECT语句[重复]

带有php数组的Mysql SELECT语句[重复]

PHP Array into mysql select 语句