你好,我有一个包含文章的表,文章有一个列类别。类别填写如1,4,6,8
如何检查是否有产品,例如类别5
我试过像
这样的东西select * from article where category in(5);
但这不起作用。如果我使用喜欢,那么我将遇到例如1和10的问题。那么如何在一个mysql查询中执行此操作?
答案 0 :(得分:3)
FIND_IN_SET()
例如:
SELECT * FROM article WHERE FIND_IN_SET('5', category) != 0;
答案 1 :(得分:2)
您可以使用select * from article where category='5' or category like '5,%' or category like '%,5' or category like '%,5,%'
但你真的不想这样做。
相反,你所追求的是
create table article (
id INTEGER AUTO_INCREMENT NOT NULL PRIMARY KEY,
headline VARCHAR(50) NOT NULL,
body VARCHAR(50) NOT NULL
);
create table articlecategory (
article_id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
PRIMARY KEY (article_id, category_id)
);
然后
SELECT
article.*
FROM
article,articlecategory
WHERE
articlecategory.article_id=article.id AND
articlecategory.category_id=5;
答案 2 :(得分:1)
试试这个:
select *
from article
where category like '%,5,%' or category like '5,%' or category like '%,5'
答案 3 :(得分:0)
嗯,这不是最好的解决方案数据库,有一个逗号分隔值的列。相反,您可以拥有一个包含两列的单独表,一列用于类别,另一列用于文章ID。 然后你可以这样做:
select * from article, category_articles where category_article.category_id = category.id and category_article.category = 5
Take a look at this for more on database normalization, which this is kinda related to
但是,如果这不是一个选项,你可以尝试使用分隔符并存储如下数据:C1C10C,然后你可以使用:
select * from article where category like '%C1C%'
不会马赫10,但会匹配1。