2011-11-11 13 views
2

IN(1,2,3)を使用して、値が1,2,3のいずれかのSQLデータベースから項目を選択できますが、文字列であるMYSQLに値がある場合はどうなりますか'1,2,3'と等しく、その値を選択したいと思います。私の知る限りでは、私はこれをしなければならない:私は逆に、ソートの「IN」とシミュレートしたい場合は結構ですSQLでCSVを保存して検索する方法は?

SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1' 

を。

SELECT whatever FROM wherever WHERE sqlvariable = '1' OR sqlvariable LIKE '1,%' OR `sqlvariable` LIKE '%,1,%' OR `sqlvariable` LIKE '%,1' OR sqlvariable = '2' OR sqlvariable LIKE '2,%' OR `sqlvariable` LIKE '%,2,%' OR `sqlvariable` LIKE '%,2' 

今、私は上記のクエリを生成するためにPHPを使用して言うことができますし、私はどこsqlvariable見つけるために探しています:しかし、私はこれをしなければならない、私は、それが含まれている1または2のいずれかどこsqlvariable選択したいとしましょう1 2 4 66 34 33 22 44または992が含まれています。このクエリが実行されるまでにはかなりの時間がかかります。

私はビット単位の実装を行うことができましたが、私は約60種類の項目しか持たないため、十分ではありません。

上記のようなCSVクエリをsqlで高速に利用する方法はありますか?私はそれがIN()のようなものだと思いますが、その逆です。

+0

私は確かにあなたが実際にCSVを格納していない願っていますあなたの既存の設計は、次のようになりますあなたのSQLデータベースの文字列!もしあなたがいれば、あなたの上司またはDBAに少しスマートになるように説得し、* CSVファイルを*保管して*保管することを願っています。 – paulsm4

+0

私は上司を持っていません、私は卿を勉強しようとしているカナダ人です:Pあなたのコメントをありがとう、私は確かにデータベースに配列を格納するより良いアプローチを学ぼうとしています。私は、例えば、vBulletinフォーラムが文字列CSVとして許可グループ情報を格納していることを知っています。たとえば、vbulletinフォーラムの権限変数は、それぞれの番号が異なる権限グループを表す '1,2,3'のように見えます。どのようにしてよりうまくいくのでしょうか? – Macmee

答えて

4

あなたはFIND_IN_SETを使用してクエリを簡素化することができます:

SELECT whatever 
FROM wherever 
WHERE FIND_IN_SET('1', sqlvariable) 
OR  FIND_IN_SET('2', sqlvariable) 

しかしこれはまだテーブルのすべての行を検索する必要があります。 CSV形式のデータを必要としないようにデータベースを再設計する方が良いでしょう。


更新:

groupname groupmembers 
Group1  1,2,3 
Group2  3,4 

あなたはより多くのこのような何かにそれを変更する必要があります:

groupid groupmember 
1   1 
1   2 
1   3 
2   3 
2   4 
+0

ありがとう!どうすれば私のテーブルを再設計できますか?私はユーザーをさまざまなユーザーグループに分類するテーブルを持っています。私は現在、usergroupに属するユーザのリストを格納するために、 'groupname'、 'groupmembers'という2つの値を持つテーブルを持っています。時には100人以上のユーザーがグループメンバーになることがあるので、CSVを使用し、 '1,2,3,4,5,6'のようなものをgroupmembersのようなものにする以外に、各数値がユーザーを表す方法はわかりません。 – Macmee

関連する問題