Php 如何将mySQL中逗号分隔的字符串值转换为整数
我正在从事一个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
//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。