Php 根据逗号分隔的值显示结果

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

我的表中有逗号分隔的值,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
        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对字符串操作的支持很差
  • 应该正确定义外键关系(不能使用列表)
  • 字符串操作排除了索引的使用
修复数据并将值放入具有正确类型和外键关系的正确连接表中

有时候,我们会被其他人糟糕的设计决策所困扰。MySQL提供了
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对字符串操作的支持很差
  • 应该正确定义外键关系(不能使用列表)
  • 字符串操作排除了索引的使用
修复数据并将值放入具有正确类型和外键关系的正确连接表中

有时候,我们会被其他人糟糕的设计决策所困扰。MySQL提供了
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一起去