人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

MySQLに関しての質問です。
絞込み検索を作りたいと思っております。


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

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

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


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

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

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

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


●質問者: makocan
●カテゴリ:インターネット ウェブ制作
✍キーワード:MySQL データ フィールド メンバー レコード
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●27ポイント

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

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

という感じかな。

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


2 ● arhbwastrh
●27ポイント

3|東京 A型

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

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


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

番号 都道府県 血液型

1 千葉 A

2 東京 B

3 埼玉 O


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


3 ● openseed
●26ポイント

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

その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/

◎質問者からの返答

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

解決しました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ