ここから本文です

DB上に条件式を格納したい

アバター

ID非公開さん

2017/2/1802:33:26

DB上に条件式を格納したい

DBのフィールド内に数値を含む条件を投入し、比較対象のパラメータがその条件にマッチするか、と言う判定を全レコードに対して走査をする中で行いたいのですが、これをスムーズと言うか高速に行うにはどのような方法があるでしょうか。

例)遊園地の乗り物一覧から、5歳のAくんが乗っても良いアトラクションを検索したい。

DB内には乗り物名とそれぞれの対象年齢(条件)を格納
レコード1 乗り物A 10歳以上
レコード2 乗り物B 5歳以上
レコード3 乗り物C 全年齢
レコード4 乗り物D 10歳未満のみ

→走査の結果、レコード2,3,4をヒットさせたい

可能であればSQL上で行いたいです。

最悪、フィールド内を演算子一文字+数値にして、文字部分切り出して条件判定、なども考えたのですが、切り出さなくても行けるような気がしてなりませんでした。
よろしくお願いいたします。

閲覧数:
76
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

2017/2/1817:33:00

「条件式を格納」しても、その条件式を取り出して解析するのが大変だと思いますよ。
遊園地の例なら、私ならこうします。

乗り物:年齢下限:年齢上限
A:10:999
B:5:999
C:0:999
D:0:9

n歳児が乗ってもよいアトラクションは?
select 乗り物
from テーブル
where n between 年齢下限 and 年齢上限

  • アバター

    質問者

    ID非公開さん

    2017/2/1900:04:13

    やはりフィールドを複数作るしかないですか・・・

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

プロフィール画像

カテゴリマスター

glo********さん

2017/2/2010:51:42

日本語をコンピュータが理解できるように差し向けなければダメです

※「対象年齢(条件)」欄は記述ルールを設けるのが前提
「のみ」という言葉があったり なかったりではダメ
ここでは「のみ」を判断基準に入れてないので条件エラーに該当させている



標準モジュールに↓

Function agecheck(ByVal ageCondition, age) As Variant

agecheck = Null

ageCondition = Replace(ageCondition, "歳以上", "<=" & age)
ageCondition = Replace(ageCondition, "歳未満", ">" & age)
ageCondition = Replace(ageCondition, "歳以下", ">=" & age)
ageCondition = Replace(ageCondition, "全年齢", "True")
ageCondition = Replace(ageCondition, ",", " AND ")

On Error Resume Next
agecheck = CBool(Eval(ageCondition))

End Function



クエリのフィールド定義は↓

年齢チェック : agecheck([対象年齢(条件)], [年齢])


それぞれ
条件マッチ → True
条件アンマッチ → False
条件エラー → Null
で返ってくる

ShiroOniさん

2017/2/2000:17:32

既出ですが、高速と言う事で、インデックスを利用するにも項目を分けることは必須です。

遅くても良いなら、方法は問わないと思いますが、速さを求めるならやはりフィールドを分けるべきです。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる