[英]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.