電子書籍の厳選無料作品が豊富!

はじめまして。初めて質問させて頂きます。

現在、システムを作成しています(開発が主業務ではありませんが)。
が、作成途中で詰まっていますので、ご教授願えれば、と思い質問させて頂きます。

いくつかの条件(氏名、内容、レベル)をユーザに入力してもらい、その条件に合致しているデータを抽出するSQLを発行したいのですが、なかなかうまくいきません。

現状では、上記3つの条件を全て入力すれば結果が反映されるのですが、1つずつで絞り込むことができません。
例えば、レベルの選択タブで「2」をユーザが選んだ場合、その条件に合致するあらゆる内容のレベル2の人が出てきてほしいのです。
また、内容で「攻撃」を選んだ場合、攻撃のレベルは関係なく全ての条件が出てきて欲しいのです。
カラオケで選曲をする際に機械を使うと思いますが、あのようなものを作成したいのです。

「ゆず」を検索する際に、「ゆ」を入れた時点で「ゆ」から始まるアーティスト名が抽出され、次に「ず」を入れると抽出件数が減ります。
あのような動作はSQLだけで行えるものなのでしょうか。

ネットで検索してもいまいち理解ができません。
どなたかご教授をお願い致します。

A 回答 (3件)

>例えば、「ゆ」で始まる文字列が100万件あったとして、「ゆ」「ず」という文字列の並びを検索すると


>該当件数が50万件になる、という検索方法です。

あくまで、Oracle側で行う処理は、前方一致(Like)検索になります。
一般的には、フロントエンドのアプリケーションで、入力項目が変異する都度、
DB検索と検索結果表示を行う仕組みとなります。
入力の邪魔を邪魔しないような非同期検索の仕組みをアプリケーションに組み込めば良いかと。

フロントエンドのアプリケーションをどんな環境・言語で書くのか判らないので、
これ以上の説明はできません。
    • good
    • 0

#1です



おそらく貴方のしたい事はDB(oracle)レベルでは実装できないと思います。
DBを利用するアプリケーション側(たとえばASP+JavaScript)ですれば可能です。
    • good
    • 0

>>例えば、レベルの選択タブで「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を打ちたいのです。

表現が稚拙すぎて申し訳ないのですが、どうか内容を理解頂けますようお願い申し上げます。

補足日時:2009/12/15 20:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!