4

'containsAll()'というJavaメソッドを使用して、ArrayListsに共通のコンテンツがあるかどうかを確認しました。

リストA(1行)と、MySQLテーブル(列'name'、行ごと)に他のいくつかのリストがあるとします。すべてのリストは、コンマで区切られた文字列(リスト内の少なくとも1つの文字列)(名前など)で構成されます。

ここで、リストAのすべての文字列が列'name'の行のいずれかにあるかどうかを確認したいと思います。結果セットには、一致する「name」のすべての行が表示されます。これには、行/リストが含まれ、リストAにすべての文字列が含まれている必要があり、追加の文字列を含めることができます。

例I

A:「Mr.T」

____name_________________________________________
 'Hannibal'
 'Hannibal','Face','Murdock','Mr.T','Donald Duck'
 'Face','Donald Duck'
 'Superman','Chuck Norris','Mr.T'
_________________________________________________   

結果セット:「ハンニバル」、「フェイス」、「マードック」、「ミスターT」、「ドナルドダック」-AND-「スーパーマン」、チャック・ノリス、「ミスターT」


例II

A:「ロッキー」、「ミスターT」、「アポロ」

 ______name__________________________________________________
 'Hannibal','Face','Murdock','Donald Duck','Superman','Mr.T'
 'Rocky','Apollo','Ivan'
 'Apollo', 'Superman','Hannibal','Rocky','Mr.T','Chuck Norris'
 'Rocky','Mr.T','Apollo','Chuck Norris'
_____________________________________________________________   

結果セット:「Apollo」、「Superman」、「Hannibal」、「Rocky」、「Mr.T」、「Chuck Norris」-AND-「Rocky」、「Mr.T」、「Apollo」、「CuckNorris」

MySQLクエリを使用してこれらの結果を実行できるかどうか疑問に思います。前もって感謝します。

4

3 に答える 3

4

配列が単一の列であることを除いて、配列の交差を行いたいようです。実行することはできますが、速度が遅く、デバッグが難しく、リレーショナル データベースの機能を活用できません。より良い方法は、テーブル スキーマを次のように変更することです。

テーブル グループ

group_id int unsigned not null auto_increment primary key,
character_list text

表 members_in_group

group_id int unsigned not null,
group_member varchar(45) not null

次に、次のようにクエリできます。

SELECT group_id, character_list
FROM groups g 
  JOIN members_in_groups m USING (group_id)
WHERE m.group_member IN ('Mr. T', ...);

このgroupsテーブルは、おそらく現在のテーブルと非常によく似ています。テーブルは、members_in_groups同じデータを簡単に検索可能な部分に分割したものです。

あなたのコメントが与えられた ETA では、それぞれに各文字のインスタンスが1 つだけ含まれていることを保証できる場合、これは機能するはずです。character_list

SELECT group_id, 
       SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) AS tally, 
       character_list
FROM groups g
  JOIN members_in_groups m ON (g.group_id=m.group_id)
GROUP BY group_id
  HAVING SUM(CASE m.group_member IN ('Mr. T', 'Apollo', 'Rocky') THEN 1 ELSE 0 END) = 3;

この場合、HAVINGには 3 つのメンバーがあるため、節は 3 に等しい必要がありIN ('Mr. T', 'Apollo', 'Rocky')ます。

于 2012-08-13T14:15:45.623 に答える
-3

SELECT * FROM tbl_name WHERE フィールド名 LIKE '%\'Mr.T\'%'

于 2012-08-13T13:58:19.123 に答える