你好,我有一個表的文章和文章有一個列類別。這些類別都充滿像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