簡體   English   中英

如何從 MySQL 行的內爆數組中提取一個值

[英]How to extract one value from imploded array in MySQL row

我正在使用 implode 在 MySQL 數據庫的一行中插入幾個值。

implode(' ', $_POST['tag']);

假設我有一個名為product表,其中的行命名為tags其中包含 3 個不同的值,如下所示:

usb adapter charger

我曾嘗試使用 like 運算符 ( % ) 使用此方法,但這沒有用。

$sql = "SELECT * FROM product WHERE tags='%usb%'";

如何在 mysql 查詢中使用 WHERE 從內爆數組中僅提取一個值?

我同意有關重新設計數據庫的意見。 乍一看,似乎使用LIKE肯定會得到您想要的結果,但是在閱讀了@Patrick Q 的 pan - panther 示例之后, LIKE並不是一個很好的解決方案是很有意義的。 有多種方法可以准確獲取您正在查找的標簽字符串,但它可能會影響性能,並且查詢會更長且更復雜。 因此,以下內容將演示使用當前tags數據值查詢的樣子:

MySQL query:

SELECT tags,
       SUBSTRING_INDEX(SUBSTRING_INDEX(tags,' ',FIND_IN_SET('usb',REPLACE(tags,' ',','))),' ',-1) v 
FROM   mytable
HAVING v = 'usb';

如您所見,有一些函數用於從數據單元格中獲取確切的字符串。 由於您的示例數據用空格分隔,而FIND_IN_SET用逗號標識值分隔,因此首先在tags列上進行REPLACE以用逗號替換空格。 然后使用SUBSTRING_INDEX兩次以使用在FIND_IN_SET提取的位置獲取字符串。 最后,在結束HAVING只得到你要尋找的標簽。

進一步演示: https : //www.db-fiddle.com/f/joDa7MNcQL2RakTgBa7qBM/3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM