我尝试选择的方式:
SELECT * FROM products_translate WHERE (category IN(10)) AND .....
数据库中字段的内容: 类别-7、10
此结构化查询仅显示仅按类别10进行分类的产品,而不显示包含其他类别的产品。 例如7、10
如何正确构建查询?
数据库结构:
TABLE `products_translate` (
`id` int(11) NOT NULL,
`uniqueID` int(11) NOT NULL,
`title` varchar(255) NOT NULL,
`category` varchar(255) NOT NULL
)
因此,类别字段可能包含:
(1, 3, 7, 10)
数据库中的一条记录
(109, 109, 'title', '7, 10')
我的目的是选择7、10个数据库请求,以输出它们在7类或10类字段中包含的所有条目。
答案 0 :(得分:0)
如果您的数据库是mysql,则可以使用FIND_IN_SET()
SELECT * FROM products_translate WHERE FIND_IN_SET('7, 10',category)> 0
答案 1 :(得分:0)
要查询等于7或10的类别,只需在查询中添加7。
SELECT * FROM products_translate WHERE category IN (10, 7)
答案 2 :(得分:0)
如果您执行SELECT * FROM products_translate WHERE (category IN(10)) AND .....
,则只会返回带有category = 10
的行。
所以您可以:
SELECT * FROM products_translate WHERE (category < 10) AND ...
:如果您想要类别1、2、3 ... 10 SELECT * FROM products_translate WHERE (category IN(7, 10)) AND ...
:如果只需要类别7和10 SELECT * FROM products_translate WHERE ... GROUP BY category
:返回所有元素(根据您的WHERE条件),但按category
分组(每个元素一个)SELECT * FROM products_translate WHERE ... ORDER BY category
:这样,您将按category
的返回元素顺序是您要找的东西吗?
编辑:添加了有关表结构的一些信息之后
SELECT * FROM products_translate WHERE (category LIKE '%10%') AND ...
:这将选择类别字段中存在“ 10”的行。但是请注意,它也可以与105
或810
之类的类别一起使用
您的类别字段不是一个好主意:使用VARCHAR将多个类别放在一个字段中不是很有效...它应该是INTEGER,因此对于类别7和10的元素,表中应该有2个元素而不是一个。为此,在uniqueID + categoryID上添加UNIQUE INDEX,以避免重复。