你好,我有一个表的文章和文章有一个列类别。这些类别都充满像1,4,6,8如何将逗号分隔的列表与值匹配?
如何检查是否存在具有它例如5类
我想是这样
select * from article where category in(5);
但是产品不起作用。如果我使用像比我会例如1和10有问题。那么我怎么能在一个MySQL查询中做到这一点?
你好,我有一个表的文章和文章有一个列类别。这些类别都充满像1,4,6,8如何将逗号分隔的列表与值匹配?
如何检查是否存在具有它例如5类
我想是这样
select * from article where category in(5);
但是产品不起作用。如果我使用像比我会例如1和10有问题。那么我怎么能在一个MySQL查询中做到这一点?
FIND_IN_SET()
例如:
SELECT * FROM article WHERE FIND_IN_SET('5', category) != 0;
试试这个:
select *
from article
where category like '%,5,%' or category like '5,%' or category like '%,5'
这将匹配'1,2,3,4,5'和'10,20,30,40,50' – Greg 2009-07-17 09:31:29
您可以做与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;
好,这是不是最好的解决方案数据库明智的,有以逗号分隔值的列。相反,你可以有一个单独的表格和两列,一个用于类别,另一个用文章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.
什么是您的表格shcema – 2009-07-17 09:28:22
是单个逗号分隔的列吗? – 2009-07-17 09:31:23