【问题标题】:How do I get a query to return an array in MYSQL?如何获取查询以在 MYSQL 中返回数组?
【发布时间】:2019-07-19 12:50:38
【问题描述】:

查询代码

 SELECT * FROM products 
              LEFT JOIN (SELECT * FROM product_images ) as images ON products.id = images.productId
              LEFT JOIN (SELECT * FROM product_shippings ) as shipping ON products.id = shipping.productId
              WHERE products.id = :productID 

我在 product_images 中有多个图像,但它只返回一个实例。

我想要做的是把它全部放在一个关联数组中,比如包含图像列表的图像、包含运输项目列表的运输等。

我知道如何使用单独的查询来实现这一点,但根据我的基准测试,这太慢了。

所以我想要类似的东西

 {
images:[...],
shipping[...],
productId:2,
productTitle:'Hello'
}

我该如何解决这个问题?

【问题讨论】:

    标签: mysql node.js database database-design


    【解决方案1】:
    SELECT *
        FROM products 
        LEFT JOIN product_images as images      ON products.id = images.productId
        LEFT JOIN product_shippings as shipping ON products.id = shipping.productId
        WHERE products.id = :productID 
    

    或者,获取 commalists(不是“数组”)

    SELECT  p.id, p.title,
            GROUP_CONCAT(i.image) AS images,
            GROUP_CONCAT(s.shipping) AS shippings
        FROM products AS p
        LEFT JOIN product_images AS i     ON p.id = i.productId
        LEFT JOIN product_shippings AS s  ON p.id = s.productId
        WHERE p.id = :productID 
    

    【讨论】:

    • 我试图实现的目标是否比运行单独的查询来单独获取数据更好?
    • @calimses - 在什么意义上“更好”?多个查询会更慢(在这种情况下)。这取决于您如何处理结果——哪组输出最容易使用?另请注意,GROUP_CONCAT 有 1024 字节的限制,这可能会导致结果被截断。
    【解决方案2】:

    如果您去掉 GROUP BY,您将在 WHERE 子句中获得 product.id 的所有图像。

    【讨论】:

    • 我更新了我的问题,有点迟钝,但我希望它能让事情更清楚。
    猜你喜欢
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2018-04-20
    • 2018-04-06
    相关资源
    最近更新 更多