MySQLに関しての質問です。

絞込み検索を作りたいと思っております。


例えば、あるテーブルのデータ構造が下記の様に
なっていたとします。

1 3 東京
2 3 A型
3 4 千葉
4 4 B型

フィールドは左から、通し番号、メンバー番号、その他となります。


上のテーブルのその他フィールを対称に、東京とA型をAND検索したとします。

すると、もちろんの事ながら、一件も引っかかりません。

これを、東京とA型と二つのレコードを持つ、メンバー番号の3の人を引っかからせる様にするにはどうすればいいでしょうか?

質問が下手ですみません。。。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/01/10 02:13:41
  • 終了:2007/01/10 16:19:29

回答(3件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/01/10 02:25:23

ポイント27pt

テーブル構造に問題が有る気もしますが、

SELECT メンバー番号 FROM テーブル
  WHERE その他 IN ( '東京','A型' )
  GROUP BY メンバー番号
  HAVING count(*) = 2;

という感じかな。

http://dev.mysql.com/doc/refman/4.1/ja/select.html

id:arhbwastrh No.2

arhbwastrh回答回数447ベストアンサー獲得回数232007/01/10 02:45:41

ポイント27pt

3|東京 A型

or検索でいかがでしょうか?3を絶対含んで、東京かA型のどちらかを含むように検索・・・

「3+東京」 or 「3+A型」 という意味です。


まぁ例だからだと思うんですが・・同じ人の情報なら横にいくつか登録したほうが簡単っていう突っ込みはいらないですよね?

番号 都道府県 血液型

1   千葉   A

2   東京   B

3   埼玉   O


http://www.techscore.com/tech/sql/03_03.html

id:openseed No.3

openseed回答回数51ベストアンサー獲得回数62007/01/10 07:05:33

ポイント26pt

既に解決済かも知れませんが、参考まで。

その1:

select distinct メンバー番号 from テーブル

     where メンバー番号 in (select メンバー番号 from テーブル where その他='東京')

       and メンバー番号 in (select メンバー番号 from テーブル where その他='A型');

その2:

SELECT t1.メンバー番号 FROM テーブル t1, テーブル t2

  where t1.メンバー番号 = t2.メンバー番号 and t1.その他='東京' and t2.その他='A型';

もし、テーブル定義をまだ変えられるのであれば・・・

属性を追加して、

通し番号メンバー番号属性その他
13地域東京
23血液型A型
34地域千葉
44血液型B型

※ ただし、unique(メンバー番号, 属性)

を前提に、以下で取得しやすい気がします。

その3:

SELECT メンバー番号 from テーブル

   where (属性='地域' and その他='東京')

       or (属性='血液型' and その他='A型')

   group by メンバー番号

   having count(属性) = 2;

※ 検証は、MySQLでやっていませんが、多分大丈夫だと思います。


実際に実行計画を取得してみないと分かりませんが、「その1」と「その3」はインデックスの張り方で、良くなると思いますが、「その2」は、たぶん項目が多くなると、一気にパフォーマンスが劣化するような・・・気がします(笑)。




あ・・・夜が明ける・・・

http://q.hatena.ne.jp/

id:makocan

皆さんありがとうございました!

解決しました。

2007/01/10 16:19:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません