如何在MySQL中以逗号分隔的列表字段中选择项目

use*_*767 2 mysql sorting

我有一个名为的表product,category我在该字段中插入了大约5到6个类别.

例如2,3,4,5,12就是这样.

但是,当我使用此查询时,它不起作用:

SELECT * FROM product WHERE category in '3' 

SELECT * FROM `product` WHERE `category` LIKE '%3%' 
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助解决它

Joh*_*ica 8

SELECT * FROM product WHERE FIND_IN_SET('3',category); 
Run Code Online (Sandbox Code Playgroud)

请参阅:http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

如果您没有find_in_set,则此代码将是等效的:

SELECT * FROM product 
WHERE category = '3' or category LIKE '%,3,%' 
      or category LIKE '3,%' or category LIKE '%,3'; 
Run Code Online (Sandbox Code Playgroud)

否则你会得到3的误报'13, 23, 40'.

警告
请注意,在字段中放置CSV列表是非常糟糕的做法.
通过从字段中提取列表并将其放在另一个表中的1对N关系,您将获得更好的性能.

  • @ypercube固定,无论如何这就是为什么`find_in_set`更好. (2认同)