- 締切済み
SQLで順に絞込みを行う方法
はじめまして。初めて質問させて頂きます。 現在、システムを作成しています(開発が主業務ではありませんが)。 が、作成途中で詰まっていますので、ご教授願えれば、と思い質問させて頂きます。 いくつかの条件(氏名、内容、レベル)をユーザに入力してもらい、その条件に合致しているデータを抽出するSQLを発行したいのですが、なかなかうまくいきません。 現状では、上記3つの条件を全て入力すれば結果が反映されるのですが、1つずつで絞り込むことができません。 例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。 また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。 カラオケで選曲をする際に機械を使うと思いますが、あのようなものを作成したいのです。 「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。 あのような動作はSQLだけで行えるものなのでしょうか。 ネットで検索してもいまいち理解ができません。 どなたかご教授をお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>例えば、「ゆ」で始まる文字列が100万件あったとして、「ゆ」「ず」という文字列の並びを検索すると >該当件数が50万件になる、という検索方法です。 あくまで、Oracle側で行う処理は、前方一致(Like)検索になります。 一般的には、フロントエンドのアプリケーションで、入力項目が変異する都度、 DB検索と検索結果表示を行う仕組みとなります。 入力の邪魔を邪魔しないような非同期検索の仕組みをアプリケーションに組み込めば良いかと。 フロントエンドのアプリケーションをどんな環境・言語で書くのか判らないので、 これ以上の説明はできません。
- asteroid-b
- ベストアンサー率61% (16/26)
#1です おそらく貴方のしたい事はDB(oracle)レベルでは実装できないと思います。 DBを利用するアプリケーション側(たとえばASP+JavaScript)ですれば可能です。
- asteroid-b
- ベストアンサー率61% (16/26)
>>例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。 SELEC * from テーブル名 where レベル = '2' これでレベルが2のレコードはすべて取得できます。 >>「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。 SELEC * from テーブル名 where アーティスト名 LIKE 'ゆ%’ これでアーティスト名がゆで始まるレコードがすべて取得できます。 参考までに 最後が「ず」を検索したければ LIKE '%ず’ ゆを含むものは LIKE '%ゆ%' >>また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。 内容に入るデータが「殴る」とか「撃つ」「食べる」等が入るとすると そのままでは抽出できないので、内容を一通り格納するテーブル「内容マスター」みたいなものを作りましょう。 そのテーブルには ID 内容 内容種別 1 殴る 攻撃 2 撃つ 攻撃 3 食べる 食事 等が格納され SELEC * from テーブル名 LEFN JOIN 内容マスター ON テーブル名.内容=内容マスター.内容 where 内容マスター.内容 = '攻撃' にて抽出できます。
補足
お忙しいところご回答ありがとうございます! ただ、私の表現が下手なため質問内容がうまく伝わっていないので、補足して質問させて頂きます。 >SELEC * from テーブル名 where アーティスト名 LIKE 'ゆ%’ ここは理解できます。問題は次です。 「ゆ」で始まる言葉の検索方法ではなく、「ゆ」の次に「ず」という文字が続くものを検索したい場合にどうすれば良いか、という質問でした。 例えば、「ゆ」で始まる文字列が100万件あったとして、「ゆ」「ず」という文字列の並びを検索すると該当件数が50万件になる、という検索方法です。 「ゆ」はそのままに、「ゆず」という文字列を検索したい、さらにその先も「か」と入力することで抽出結果が絞り込まれていくようなSQLを打ちたいのです。 表現が稚拙すぎて申し訳ないのですが、どうか内容を理解頂けますようお願い申し上げます。