2009-07-17 4 views
2

こんにちは私は記事が入ったテーブルを持っていて、その記事は列カテゴリを持っています。カテゴリは私がコンマ区切りリストと値をどのように一致させることができますか?

select * from article where category in(5); 

のようなものを試してみましたが、その例として、カテゴリ5

のためにそれに持っている製品がある場合、私は確認することができますどのように1,4,6,8

のように満たされています動作しません。私のようなものを使用すると、例1と10の問題が発生します。これを1つのmysqlクエリでどうやって行うことができますか?

+0

あなたのテーブルshcemaは何ですか? –

+0

はカンマ区切りの単一のカテゴリですか? –

答えて

3
  1. は悪い考えです - あなたが別のテーブルを使用する必要があります。
  2. INはCSVをためではない - それは、単一の列
  3. さておき、これらの引数の値をリストするためだ、あなたは、例えばFIND_IN_SET()

を使用することができます。

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

+1 –

0

はこれを試してください:あなたが照会する必要がある列にCSVを保存

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

+0

ああええ、大失敗:) –

+0

は私に新しい機能を表示するために訂正をしました –

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付きの2つの列を持つ別々のテーブルを持つことができます。 そして、あなたができる:

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に一致します。

関連する問題