2016-05-01 24 views
0

データベースで選択クエリを実行する際に問題が発生しました。PHPを使用してmysqlのコンマ区切り値を検索

表:example_tbl

| Id | standardid | subjectid | 
| 1 | 1,2,3 | 8,10,3 | 
| 2 | 7,6,12 | 18,19,2 | 
| 3 | 10,11,12 | 4,3,7 | 

そして、私が実行しようとしていますものの種類の例:

データの一部は、カンマ区切りのリスト、例として保持されます
select * from table where standardid in (7,10) and subjectid in (2,3,4) 
select * from table where FIND_IN_SET(7,10,standardid) and FIND_IN_SET(2,3,4,subjectid) 

私に教えてもらえることはありがとうございます。

+0

ので - それは 'standardid'または' standard'のですか? –

+0

申し訳ありませんが、standardid –

+0

テーブルが大きい場合、このタイプのテーブルの検索は非常に遅いことに注意してください。コンマで区切られた値は、どのような方法でも索引付けされないため、項目を効率的に検索できません。 – Barmar

答えて

0

データベース内のカンマで区切られた値は、本質的に問題があり、非効率的であり、データベース設計を正規化するのははるかに優れています。 FIND_IN_SET()のシンタックスをチェックすると、セット内の単一の値が検索され、セット内の複数の値と一致することはありません。

は、複数の値のためにそれを使用するには、機能を複数回使用する必要があります。

select * from table 
where (FIND_IN_SET(7,standardid) 
    OR FIND_IN_SET(10,standardid)) 
    and (FIND_IN_SET(2,subjectid) 
    OR FIND_IN_SET(3,subjectid) 
    OR FIND_IN_SET(4,subjectid)) 
+0

のように動的に$ a = "2,3,4" –

+0

$ aを個々の値の配列に分割し、その配列の各値に対してクエリを構築する必要があります –

+0

私はフォームの後に値を取得しています。 –

関連する問題