繁体   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