Php 根据逗号分隔的值显示结果
我的表中有逗号分隔的值,tbl_请求如下:Php 根据逗号分隔的值显示结果,php,mysql,sql,Php,Mysql,Sql,我的表中有逗号分隔的值,tbl_请求如下: request_id name1 price 4 12,14 99.23 从这个表中,我需要根据值name1(即12,14)从另一个表中查找数据。我尝试了以下代码 SELECT r.price, ( SELECT GROUP_CONCAT(pd.product_name) FROM tbl_products AS pd
request_id name1 price
4 12,14 99.23
从这个表中,我需要根据值name1(即12,14)从另一个表中查找数据。我尝试了以下代码
SELECT
r.price,
(
SELECT
GROUP_CONCAT(pd.product_name)
FROM
tbl_products AS pd
WHERE
(
pd.product_id IN(GROUP_CONCAT(r.name1))
)
) as xyz
FROM
tbl_request AS r
WHERE
r.request_id = 4
我需要以逗号分隔的值获取name1中id的产品名称。但是使用上面的代码,我只能得到一个值。如何解决此问题?您可以使用
FIND\u IN\u SET
:
SELECT *
FROM yourTable
WHERE FIND_IN_SET('12', name1) > 0; -- a non-zero value means a match
上述对FIND\u IN_SET
的调用将搜索name1
列,该列由CSV字符串组成,以查找显示为任意值的值12
请注意,在数据库表中存储CSV数据通常是一种不好的做法,因为它表示未规范化的数据,并且您可能期望性能不佳。您可以使用
FIND_in_SET
:
SELECT *
FROM yourTable
WHERE FIND_IN_SET('12', name1) > 0; -- a non-zero value means a match
上述对FIND\u IN_SET
的调用将搜索name1
列,该列由CSV字符串组成,以查找显示为任意值的值12
请注意,在数据库表中存储CSV数据通常是一种不好的做法,因为它表示未规范化的数据,并且您可能期望性能不佳。您的数据结构已损坏。以下是它不好的原因:
- 将数字存储为字符串是不好的
- SQL数据库中的列应具有一个值
- SQL对字符串操作的支持很差
- 应该正确定义外键关系(不能使用列表)
- 字符串操作排除了索引的使用
find_in_set()
,这有助于实现此目的:
SELECT r.price, GROUP_CONCAT(pd.product_name) as xyz
FROM tbl_request r LEFT JOIN
tbl_products p
ON find_in_set(p.product_id, r.name1) > 0
WHERE r.request_id = 4
GROUP BY r.price;
您的数据结构已损坏。以下是它不好的原因:
- 将数字存储为字符串是不好的
- SQL数据库中的列应具有一个值
- SQL对字符串操作的支持很差
- 应该正确定义外键关系(不能使用列表)
- 字符串操作排除了索引的使用
find_in_set()
,这有助于实现此目的:
SELECT r.price, GROUP_CONCAT(pd.product_name) as xyz
FROM tbl_request r LEFT JOIN
tbl_products p
ON find_in_set(p.product_id, r.name1) > 0
WHERE r.request_id = 4
GROUP BY r.price;
将精力放在修复数据结构上,而不是编写查询以使其正常工作。数据库中的结构错误,请查看正常表单并在为时已晚之前更正结构。@Robert I被要求在其他团队项目中修复此问题:(将精力放在修复数据结构上,而不是编写查询以使其正常工作。数据库中的结构错误,请查看正常表单并在为时已晚之前更正结构。@Robert I被要求在其他团队项目中修复此问题。:(谢谢你的建议。我会记在心里的。但是现在我必须和find_in_set一起去。谢谢你的建议。我会记在心里的。但是现在我必须和find_in_set一起去