簡體   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