繁体   English   中英

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

[英]How to convert string value separated by comma into integer from mySQL

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

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

//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 中执行此操作?

这是您不应在关系数据库中使用逗号分隔列表原因之一

解决方法是在连接条件中使用FIND_IN_SET() 函数,而不是=

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_purchased是逗号分隔的 item_code 字符串吗? 我不擅长加入,但我认为这会做

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_purchase 的假设是正确的,这将返回item_purchased列中所有项目的列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM