我有一个名为product_info
的表,其中包含以下数据:
+-------------+------------+----------------+
| title | slug | tags_id |
+-------------+------------+----------------+
| Maserti | /maserati | 10,34,7,110 |
| Ferrari | /ferrari | 10,34,7,107 |
| Rolls Royce | /rollroyce | 6,10,121,64,78 |
| Caterpillar | /cat | 4,8,210,214 |
| Peterbilt | /peterbilt | 8,100,210,214 |
+-------------+------------+----------------+
接下来我有一串 php:
$tag = ['id' => 10, 'slug' => 'luxurycars', 'title' => 'LuxuryCars'];
我想搜索我的表,看看我是否有任何带有此标签的记录。您可以看到标签的 ID 出现在tags_id
行中。
如您所见,the id of the tag is '10'
.我尝试了很多查询,但结果总是不是我想要的。 例如:我想在tags_id
中搜索'10'
,我希望它只匹配'10'
但它匹配10, 107, 110 and 210
和任何相似或有10
的数字。
我期望的是当我搜索'10'
(这是一个名为 LuxuryCars 的标签(时,我希望在结果中Maserati, Ferrari and Rolls Royce
(显然是通过被tags_id搜索,就像他们在表格中一样(
我不希望在我的结果中出现Peterbilt and Caterpillar
,因为它们有一个与之关联的标签210
。
请帮忙! 谢谢你的时间!
要在逗号分隔的列表中搜索单个值,可以使用FIND_IN_SET()
:
SELECT *
FROM mytable
WHERE FIND_IN_SET('10', tags_id);
从文档中:
返回一个值,范围为
FIND_IN_SET(str,strlist)
1
N
,如果字符串
str
位于由N
子字符串组成的字符串列表中strlist
。字符串列表是由,
字符分隔的子字符串组成的字符串。