2009-07-17 96 views
2

你好,我有一個表的文章和文章有一個列類別。這些類別都充滿像1,4,6,8如何將逗號分隔的列表與值匹配?

如何檢查是否存在具有它例如5類

我想是這樣

select * from article where category in(5); 

但是產品不起作用。如果我使用像比我會例如1和10有問題。那麼我怎麼能在一個MySQL查詢中做到這一點?

+0

什麼是您的表格shcema – 2009-07-17 09:28:22

+0

是單個逗號分隔的列嗎? – 2009-07-17 09:31:23

回答

3
  1. 在您需要查詢的列存儲CSV是一個壞主意 - 你應該使用一個單獨的表。
  2. IN不是CSV的 - 它是一個單柱
  3. 這些參數預留上市值,你可以使用FIND_IN_SET()

例如:

SELECT * FROM article WHERE FIND_IN_SET('5', category) != 0; 
0

試試這個:

select * 
from article 
where category like '%,5,%' or category like '5,%' or category like '%,5' 
+0

這將匹配'1,2,3,4,5'和'10,20,30,40,50' – Greg 2009-07-17 09:31:29

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; 
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.