我想将子查询的所有匹配数据逗号与web.config.template
函数连接起来。但是这个查询只通过连接返回一个数据,如果我传递静态ID,如IN()
,则返回与ID对应的所有数据。
示例:
IN(1,2,3)
返回一条记录:
(SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname FROM tbl_product WHERE product_id IN (b.product_id)) as product
返回3条记录:
while (SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname FROM tbl_product WHERE product_id IN (1,2,3)) as product
列包含逗号分隔值。
这是我的疑问:
b.product_id
请让我知道我在哪里做错了。
答案 0 :(得分:1)
这个表达式:
SELECT GROUP_CONCAT(product_name SEPARATOR ", ") AS pname
FROM tbl_product
WHERE product_id IN (b.product_id)) as product
不按预期行事。如果product_id
是一个字符串,例如'1,2,3'
,则表示列表中的一个元素,而不是三个。
问题的正确解决方法是不将列表存储为逗号分隔列表。 SQL有一个很好的数据结构来存储列表;它被称为“表”,而不是“字符串”。另外,将数字存储为字符串是个坏主意。
当您正在找出正确的数据结构时,有一种解决方法。这是函数find_in_set()
:
WHERE find_in_set(product_id, b.product_id) as product