Php 如何将mySQL中逗号分隔的字符串值转换为整数

Php 如何将mySQL中逗号分隔的字符串值转换为整数,php,mysql,sql,Php,Mysql,Sql,我正在从事一个php项目,从mysql检索数据。我有一个代码列表,存储为字符串,由逗号分隔,在另一个表中引用。有没有办法从字符串中获取所有值并返回它引用的文本 例如,购买的物品可能包含一个或多个物品代码。我希望查询返回项目名称,而不是项目代码 //item_purchased for transaction 123 --> ,111,222,333, SELECT s.transaction_id, s.item_purchased, i.item_id FROM stock s IN

我正在从事一个php项目,从mysql检索数据。我有一个代码列表,存储为字符串,由逗号分隔,在另一个表中引用。有没有办法从字符串中获取所有值并返回它引用的文本

例如,购买的物品可能包含一个或多个物品代码。我希望查询返回项目名称,而不是项目代码

//item_purchased for transaction 123 --> ,111,222,333,

SELECT s.transaction_id, s.item_purchased, i.item_id
FROM stock s

INNER JOIN ref_item i
ON s.item_code = i.item_code

WHERE transaction_id = 123

Desired outcome: apple, carrot, milk (not ,111,222,333,)
有没有一种方法可以更好地在mySQL查询中或者在PHP中实现这一点?

这是其中一种方法

解决方法是在联接条件中使用,而不是
=

SELECT s.transaction_id, GROUP_CONCAT(i.item_name)
FROM stock s

INNER JOIN ref_item i
ON FIND_IN_SET(i.item_code, s.item_purchased)

WHERE s.transaction_id = 123

GROUP BY s.transaction_id

但不幸的是,这使得查询效率非常低,因为它不能使用索引来搜索ref_item表。它必须进行表扫描,因此它的性能非常差,并且随着表的增大而变得更糟。

购买的是
item\u
一个逗号分隔的item\u代码字符串吗? 我不擅长连接,但我认为这样就可以了

SELECT s.transaction_id, s.item_purchased, DISTINCT(i.item_id)
  FROM stock s, ref_item i
 WHERE i.item_code in (s.item_purchased ) 
   AND s.transaction_id = 123

如果我对购买的物品的假设是正确的,这将返回
item\u purchased
列中所有物品的列表。

这就是为什么要对数据库进行标准化,如果不使用逗号分隔的列表,这将很简单。为什么在从dbquery获取完整的名称列表字符串后,不能在php中使用explode(),在数组中旋转字符串,您应该能够像
$arr[$item\u id]
那样引用它这是非常糟糕的数据库设计的证据。你不能把这个逗号分隔的列表改成一个合适的表格结构吗?太可怕了!谢谢,我不知道在mySQL中可以做到这一点。如果性能受到影响,我可能会在调用db之前先用PHP进行转换。这是一个语法错误。不能像使用函数一样使用DISTINCT。