【发布时间】:2021-10-14 08:43:23
【问题描述】:
我正在寻找从不同表返回多个数据的 SQL 查询。
这是一个例子:
SELECT
product.*,
(SELECT category_name FROM category
WHERE product.category_id = category_id) AS category_name
FROM
product_table AS product
WHERE
product.id = 17
此请求将完美运行,但我需要第二个子查询:
(SELECT category_name FROM category
WHERE product.category_id = category_id) AS category_name
返回 category_table 并将所有列转换为字符串数组,这样我就可以在 PHP 中explode(',', $category_name)。
所以换句话说,我试图在另一个表中检索一个表,而这在 SQL 中是不可能的。我想将category_table中的行转换为字符串数组,然后在PHP中将其转换回真正的数组。
预期结果:
ProductObject {
id => 1,
name => "Product Name",
category => "[id, category_name, category_description]" # It also be a json
}
预期的解决方案类型:
(SELECT TO_STRING_ARRAY(*) FROM category
WHERE product.category_id = category_id) AS category_table
其中 TO_ARRAY(不存在)是将行转换为字符串数组的 SQL 函数。
这也可能是一个非常有用的解决方案,因为我们可以通过这个在一个 SQL 查询中获取表中的表(嵌套表)。
【问题讨论】:
-
查找
GROUP_CONCAT()。如果您需要嵌套表格,那么我通常会这样做,将表格转换为 XML。 -
我现在很想写这个(但不起作用)` SELECT product.*, (SELECT GROUP_CONCAT(*) FROM category WHERE product.category_id = category.id) AS category_name FROM product_table AS product WHERE product.id = 17 ` 如果有办法自动连接所有列,那就太好了。
-
GROUP_CONCAT()用于单个字段(或首先与CONCAT连接的字段)