メインコンテンツへスキップ

あいまい検索の作り方

コメント

21件のコメント

  • nkmt

    当フォーラムで検索キーワードに collate で探してみるといいと思います。

  • mari

    nkmtさん

    いつもお世話になっております。

    DB SQL欄は初めて使用するのですが、参考にさせていただきながら書いてみました。

    実行すると、先日教えていただいた空のデータビューイベントを通り、エラーメッセージが出てしまいます。

    記述が誤っているのでしょうか。

     

    :B COLLATE Japanese_CI_AI LIKE :I

    「:B」が得意先名、「:I」が得意先名のあいまい検索値です。

  • nkmt

    COLLATE Japanese_CI_AI の部分は
    COLLATE Japanese_CI_AS がいいと思います。
    COLLATE Japanese_CI_AS の意味についてはネット検索すると出てきます。
    (半角、全角、大文字、小文字問わずという意味だとおもいます。)

    :B     COLLATE Japanese_CI_AS     :I  の :Iの部分には
    '%'   &   ZEN(  UPPER  (  TRIM(  検索文字 )  )  )   & '%' を格納した変数を指定するといいです。

    検索条件に
    e工業と入力すると

    SQL文のWEHEREで例えると
    WHERE  得意先名  COLLATE Japanese_CI_AS    LIKE    '%E工業%' 
    みたいな感じの検索になります。

  • nkmt

    あいまい検索で、半角、全角、大文字、小文字を問わずHITして欲しい場合は
    得意先名  COLLATE Japanese_CI_AS    LIKE    '%E工業%' はいいと思いますが

    半角、全角、大文字、小文字 を区別して欲しい場合は、この方法は適さないと思います。

  • Tanda

    mariさん、

    文字列の「部分一致検索」でしたら、「Magic SQL」欄でLIKE関数を用いるのが一番簡単ですよ。この関数を使用すれば、Magicが適切なSQL文を自動で生成してくれます。ご自分でSQL文を書く必要がなくなります。

    (画像はMagic連載購読コーナーより)

  • nkmt

    ちなみにmari様のタスクは、
    検索して欲しい文字を入力する部分と
    得意先マスタを表示する部分が同一タスクにあるのですね。


    この作りも全然しない訳ではありませんが、

    個人的には、
    検索文字を入力するタスクがあって、
    そのタスクの下に、データを表示するタスクを作る事の方が多いです。


    mari様のタスク構造は
    得意先コードか
    得意先名を入力したら、
    ビュー再表示などのイベント実行は必要だと思います。

     

    それと金曜日 17:07に投稿された画像の
    先頭文字でのFROM~TO範囲指定では使えますが
    文字一致絞りとしては適した使い方ではないです。

  • nkmt

    検索文字が未入力の時は、全件対象になるよう
    or :I='' の条件追加も必要だと思います。

    親:条件指示タスク
     子:結果表示タスク とする事が多いです。

    今の作りのまま
    V=項目 C変更 検索文字
     ビュー再表示 が効くといいのかもしれませんが、
    カーソルパーキングも先頭項目に戻ってしまうかもしれません。

  • mari

    nkmtさん、tandaさん

    コメントありがとうございます。

    ページ更新のタイミングが悪く、いったんコメント削除しました。

    じっくり読ませていただいて、またご連絡させていただきます。

  • Tanda

    mariさん、

    ちなみに、Like 関数がなかった頃は、InStr() 関数を使うしかありませんでしたので、1秒で済む複合部分一致検索が下図のように、9秒も掛かっていました。

    (画像はMagic連載購読コーナーより)

    それが今や、前のコメントで示したように、Like 関数一発で、わずか1秒で検索が完了します!
    複合検索で1秒ですから、単純部分一致検索なら、コンマ数秒の世界ですよ。

  • mari

    nkmtさん

    お世話になっております。

    ご教示いただきました、SQL構文、親子タスク構成、検索値未入力時に全件対象となる条件追加など、参考にさせていただき実現することができました!

    大文字小文字などの区別を選べる点も、大変勉強になりました。

    ありがとうございました。

     

    tandaさん

    お世話になっております。

    Magic SQLでの実行方法ですが、時間が足りなくなってしまったので、明日チャレンジしたいと思います。

    またご助言いただくかと存じますが、何卒よろしくお願いいたします。

  • Tanda

    mariさん、

    Magic SQLはですね、わざわざSQL文を書くのは面倒だという人向けに用意された機能ですので、SQL文をゴリゴリ書くのを厭わないという人であれば、SQL文を直接記述していただいていいですよ。

    ただ、せっかくMagicを使っているのですから、Magic固有の機能を用いて、SQL文を自動生成してもらったほうが、開発効率がアップするのは間違いないですよ。

    頑張ってください。

  • nkmt

    先の自分の投稿で
    COLLATE Japanese_CI_AS の意味についてはネット検索すると出てきます
    なんて投稿をしてしまいましたが今回学び直しになりました。
    アクセントも今回初めて知りました。CI_AIはそういう事だったのねとか。
    ありがとうございました。

  • nkmt

    あいまい検索で
    大文字/小文字、全角/半角、ひらがな/カタカナ問わず 見つけてくれます
    とご紹介すると喜ばれる事があります。
    その場合は、Magic SQL では難しいのかなと思いました。
    DB SQL あるいはSQLコマンド の出番になると思います。

    Magic SQLで済む場面では、それを用い、
    先に述べたような場合は、DB SQLを用い、
    GROUPING集計等のSQL文を書くのを厭わずその活用がメリット大な場合、SQLコマンド
    のようにそれぞれ適した使い方が用意されておりMagic有難いです。

  • mari

    tandaさん、nkmtさん

    お世話になっております。

    先日、Magic SQLでもあいまい検索を実現することができました!

    ありがとうございました。

    作成のなかで不思議に思ったのが、DB SQLとMagic SQLともに、ZEN関数やUPPER関数がなくても

    大文字/小文字、全角/半角、ひらがな/カタカナ問わず検索ができたことです。

    Magicの標準機能なのでしょうか…?

    なにかご存じであれば、ご教示お願いいたします。

  • nkmt

    Magic SQLでも例えば abc と検索文字指定して、ABCなどを抽出出来たという事なのでしょうね。
    私の予想は外れていたみたいですね。失礼しました。
    私もDB SQLも試してみたいと思います。
    コメントありがとうございました。


  • nkmt

    思い出しましたが
    mariさんのデータベースは
    japanese CI Aなんとかで作られていて

    私は必ず90BIN2で作る違いもあるのかもしれません。

  • mari

    nkmtさん

    コメントありがとうございます。

    恐れ入りますが、90BIN2とはMagic特有の何かでしょうか…?

    SQLは全然詳しくないので、ご教示いただけると幸いです。

    よろしくお願いいたします。

  • nkmt

    データベースの照合順序で
    japanese 90bin2は半角・全角、大文字・小文字等を区別してソート等出来るやつだと思います。

  • Tanda

    mariさん、

    > Magicの標準機能なのでしょうか…?

    SQL Server側の機能です。

  • nkmt

    tandaさん>SQL Server側の機能というご説明ありがとうございます。
    私の回答は抜けがありました。

  • mari

    nkmtさん、tandaさん

    ご回答いただきありがとうございます。

    SQL Serverについても知らないことが多いので、大変勉強になりました。

    また何かあれば投稿させていただくかと存じます。

    何卒よろしくお願いいたします。

サインインしてコメントを残してください。