AccessのSQL URL大文字小文字判別

このQ&Aのポイント
  • AccessのクエリでURLのパターンをマッチさせ、カテゴリ情報を出力する方法を解説します。
  • URLの大文字小文字を区別せずにマッチさせるには、バイナリで比較する必要があります。
  • 具体的なクエリの構文エラーを修正する方法を教えてください。
回答を見る
  • ベストアンサー

AccessのSQL URL|大文字|小文字判別

URLのパターンを見て、URLがマッチしたらカテゴリ情報を出力するクエリをAccessで作っています。 ・URL_M(URLのパターンを格納するマスタ) RULE_ID | URLパターン | カテゴリ | 階層 1 | test/area | cate1 | 詳細 2 | test/A | cate2 | Top ・DATA(いろいろなURLを格納するデータ) URL_ID | URL 1001 | test/a 1002 | test/area12/index.htm 1003 | test/A/index.htm ・出力したいVIEW URL_ID | RULE_ID | URL | URLパターン | カテゴリ | 階層 1001 | 空 | test/a | 空 | 空 | 空 | 1002 | 1 |test/area12/index.htm | test/area | cate1 | 詳細 | 1003 | 2 |test/A/index.htm | test/A | cate2 | Top | これを出力するAccess2013のクエリで作りたいです。 SELECT D.URL_ID, RULE_ID,D.URL, U.URLパターン, U.カテゴリ, U.階層 FROM DATA AS D LEFT JOIN URL_M AS U ON ( (D.URL Like U.URLパターン+"*") and (U.URLパターン = select max( U2.URLパターン) from DATA as D2 LEFT JOIN URL_M as U2 on D2.URL Like U2.URLパターン+"*" ) ) こんな感じで組んでみたのですが、構文エラーが出て、うまくいきません。 また大文字小文字の区別をつける方法も知りたいです。 URL_ID:1001は、RULE_ID:2にマッチせず、空で出力したいです。 バイナリで比較しなければできないということまでは調べたのですが・・・・ http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q109179500 http://www.lasical.com/2010/12/27/370/ http://www.f3.dion.ne.jp/~element/msaccess/AcTipsBinaryField.html SQLがわかる方、教えていただければ幸いです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

前回の回答は、部分一致のコードでした。 前方一致なら、 SELECT D.URL_ID, U.RULE_ID, D.URL, U.URLパターン, U.カテゴリ, U.階層 FROM DATA D LEFT JOIN URL_M U ON InStr(1, D.URL, U.URLパターン,0)=1; 補足 もし、 RULE_ID | URLパターン | カテゴリ | 階層 1 | test/area | cate1 | 詳細 2 | test/A | cate2 | Top 3 | test/AB | cate3 | Top というように途中までは同じURLパターンがあると、結果が重複する場合があります。 その場合は、URLパターンの長い方を優先するという場合は、 SELECT DATA.URL_ID, Q.RULE_ID, URL, Q.URLパターン, Q.カテゴリ, Q.階層, Q.URL_ID FROM DATA LEFT JOIN (SELECT M.*, Q.URL_ID FROM URL_M M INNER JOIN (SELECT URL_ID, Max(T.URLパターン) AS URLパターン FROM (SELECT URL_ID, URLパターン FROM DATA AS D INNER JOIN URL_M AS U ON InStr(1, D.URL, U.URLパターン,0)>0) AS T GROUP BY URL_ID) Q ON M.URLパターン = Q.URLパターン) Q ON DATA.URL_ID = Q.URL_ID;

estel-buraito
質問者

お礼

hatena1989さん、回答ありがとうございました! まさに期待していた値が出ました。 likeでどうにか解決しようと思っていたのですが InStrという関数があるのですね。 知りませんでした。 部分一致なら、文字が返ってくるので0以上、 前方一致なら、1文字目が一致するから=1 ということですよね。 また、補足でURLの長い方を優先する、 まさに期待通りのお答えを頂いて、感謝です! こんなに複雑な副問い合わせを使うのですね。 重複レコードが出てしまって、 どうやって1つに絞り込めばよいのかわからなかったので、 maxで最大の長さのものを拾ってこようと思ったのですが うまくいかず、困りきっておりました。 本当に助かりました。ありがとうございます!!! 正直に申し上げると、上記のSQLを理解しきってはいないのですが SQLを内側から読み解くと (1)DATAのURLとURL_Mを部分一致(0以上)でしぼったものを「T」とする (2)重複を省くために、「T」のURLパターンの長いものをmaxとgroup byで作る(名称なし?) (3)URL_MST の別名「M」と今作った名称なしのMaxのものをM.URLパターン = Q.URLパターンで一致したものを「Q」とする (4)DATAに「Q」をleft outer joinでURL_IDでひもづける ということですよね。 (2)まではなんとなく、わかったのですが(3)と(4)が何をしているのか 勉強不足で理解が及ばず、申し訳ありません。 ANDではなく、(3),(4)のように副問い合わせで入れ子にしないと、 重複レコードの絞込はきっとできないのですよね。 SQLの結果としては、本当に期待通りのものです。 ありがとうございました!

その他の回答 (1)

回答No.1

下記でどうですか。 SELECT D.URL_ID, U.RULE_ID, D.URL, U.URLパターン, U.カテゴリ, U.階層 FROM DATA D LEFT JOIN URL_M U ON InStr(1, D.URL, U.URLパターン,0)>0;

estel-buraito
質問者

お礼

ご回答ありがとうございました! No2の方にも書きましたが、本当に助かりました!

関連するQ&A

  • 動的URLから静的URLへの301リダイレクト

    下記のように動的URLを静的なURLに置き換えています。 http://www.sample.com/dir/aaa/index.php?content_id=1 ↓ http://www.sample.com/aaa_index.content_id_1.htm この動的URLを、置き換えた静的URLへ301リダイレクトさせたいのですが、うまくいきません。 htaccessの記述を下記のようにしましたが、多分、動的URLの「?」があるためうまくいかないようです。 RewriteEngine on RewriteBase / RewriteRule ^dir/aaa/index\.php?content_id=(.*)$ /aaa_index.content_id_$1.htm [R=301,L] 「?」が含まれる動的URLから静的URLに301リダイレクトさせたい場合、どのように記述すれば良いでしょうか?

  • SQL文 テーブルの作成方法について

    以下のようなTABLE1からTABLE2というテーブルを作成したいと考えております。 元テーブル(TABLE1)は、IDという項目がキーとなってデータが入っており、NAME1とNAME2という項目があります。 (NAME1は必ず値が入っていますが、NAME2は値が入っていない場合もあります) 加工後のテーブル(TABLE2)で、NAME1とNAME2の値を結合した形で結果を出力したいと考えております。 (新たに作成したNAMEカラムは、必ずしもユニークになっているとは限りません。NAMEとIDを組み合わせるとユニークになります) ---------------------------------------------------- ■ TABLE1 ID NAME1 NAME1_CATE NAME2 NAME2_CATE ---------------------------------------------------- 001 鈴木 A 山田 B 002 山本 A 003 佐藤 A 高橋 B ---------------------------------------------------- ---------------------------------------------------- ■ TABLE2 ID NAME NAME_CATE ---------------------------------------------------- 001 鈴木 A 001 山田 B 002 山本 A 003 佐藤 A 003 高橋 B ・・・ ---------------------------------------------------- いろいろ試していますが、どのようなSQL文を書いたらよいのか分かりません。 現状のSQL(エラーとなります) ====================================================================================== SELECT ID, NAME, NAME_CATE FROM (SELECT ID, NAME1 as NAME, NAME1_CATE as NAME_CATE FROM TABLE1 WHERE NAME1<>NULL) JOIN (SELECT ID, NAME2 as NAME, NAME2_CATE as NAME_CATE FROM TABLE1 WHERE NAME2<>NULL) ====================================================================================== 初歩的な質問になるかと思ってしまうかと思いますが、よろしくお願いいたします。

  • .htaccessで動的URLを静的化

    動的URLを静的化したいと考えています。 ネットで調べるとよくあるサンプルは RewriteRule ^/dir/([0-9A-Za-z]+)/([0-9A-Za-z]+)$ /dir/index.php?a=$1&b=$2 という風に「静的なURLにアクセスして、内部ではパラメータ付きのURLでの処理をさせる」 というパターンが多いのですが、私がやりたいのは逆で「動的URLにアクセスがあれば静的URLにリダイレクトをさせる」というものです。 理由は、 ・すでにサイトがある程度できあがっていて、既存のURLもある程度Googleにインデックスされている ・パラメータの組み合わせパターンが色々あるため上記のようなルールで対応できない などです。 そこで http://xxx.com/dir/index.php?a=01&b=02 や http://xxx.com/dir/index.php?b=02&c=03&x=999 といった動的URLを http://xxx.com/dir/a-01/b-02/ http://xxx.com/dir/b-02/c-03/x-999/ RewriteRuleを使ってこのような形で一旦301リダイレクトさせ、これをPHPの内部処理でパラメータ付きURLに戻すことによって既存のロジックを生かしたままURLを静的化できないかと考えています。 RewriteRuleの記述を色々書き換えて試してみたのですが、どうしてもやりたいようなURLの変換ができません。 どのように記述すればよいか、ご教授下さい。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • URL エンコードって?

    URLを index.jps?id=1&page=2 を↓ index.jps%3Fid%3D1%26page%3D2 とかにするのは何故なのでしょうか? 上のURLでも開けるのに何故エンコード??する必要があるのでしょうか? 初心者なので、噛み砕いて教えて頂けると幸いです よろしくお願いします

  • Ajax.Requestで取得したHTMLソースから'href'の値を

    Ajax.Requestで取得したHTMLソースから'href'の値を取得する方法について Javascriptにて取得した別ページのHTMLタグから 必要な部分のみ値を取得し、配列に格納することは可能でしょうか? 以下Javascript ------ var url = "http://test/index.htm"; new Ajax.Request( url, { "method":"get", asynchronous:false, onComplete: function(request) { html = request.responseText; } } ); alert(html); ------ 以下"http://test/index.htm"のHTMLタグ ------ <html> <head> </head> <body> <a href='http://test/index2.htm'>index2</a> <a href='http://test/index3.htm'>index3</a> <div>index4</div> </body> </html> ------ 上記で"http://test/index.htm"のHTMLタグの全てを取得して出力することはできたのですが、 "href"の"http://test/index2.htm" "href"の"http://test/index3.htm"のみ配列に格納したいのです。 よろしくお願いいたします。

    • ベストアンサー
    • AJAX
  • HTML内のリンクURLとリンク文字の取得について

    色々調べてある程度は出来たのですが、本当に欲しいとしている事が出来ない為質問させて頂きます。 PHPにおいてあるURLを指定して <a href="http://test.net/">1</a><BR> <a href="http://test.net/index.html">2</a><HR> <a href="http://test.net/index.php">3</a><BR> あああ<BR> <a href="./test.html">5</a> 等と入っている場合に http://test.net/,1, http://test.net/index.html,2, http://test.net/index.php,3, ./test.html,5, の様に変換したいのです いいやり方がありましたらご教授お願い致します。

    • ベストアンサー
    • PHP
  • URLの?以降の質問

    index.php?a_id=○○○&u_id=○○○ のようにして、○○○を代入できる方法を教えていただけませんでしょうか?

    • ベストアンサー
    • PHP
  • Accessの内部結合

    こんにちは。 Accessでcateテーブルとgoodsテーブルがあります。 select * from goods inner join cate on goods.cateid = cate.id; クエリデザインで、テーブルとテーブルを結合して上記のようなSQLができました。 これは動作することを確認しました。 SQLビューで下記のようなSQLを書きました。 select * from goods inner join cate on left(goods.cateid,5) = cate.id; しかしながら、動きませんでした。 VBAを使わずに、Accessの標準のクエリデザインから上記のようなSQLを実行させることは可能でしょうか? クエリデザインでselect left(cateid,5) as cateid from goodsというTESTクエリをつくり、TESTクエリとcateテーブルとジョインさせれば解決しそうなことはわかるのですが・・・ 宜しくお願いします。

  • 部分ページURLへのアクセスでトップフレームを表示

    わかりにくいタイトルでごめんなさい。 http://www.~.jp/index.htm でアクセスできるトップページは左右の2つのフレームに別れていて、右側にコンテンツ、左側が各コンテンツへのリンク(画像)を表示しているとします。 そこでコンテンツAをクリックしたときには、右側にトップページと同じディレクトリにあるa.htmを表示します(状態A)。これは、targetでフレームを指定しています。 さて、index.htmのURLをご案内して見に来てもらう時は問題ないのですが、a.htmのURLをご案内して来てもらったときは、左側のリンクバーが表示されません。そのときでも、状態Aの様に表示するにはどうしたらいいでしょうか。 全てのページをフレームページにして、リンクバーをロードさせれば実現出来そうですが、あまりスマートには思えなくて...

    • ベストアンサー
    • HTML
  • 静的URL変換について

    現在,phpでウェブサイトを作成しているのですが、 サイト内検索をしたときのURLを静的化できないか、考えております 例)getで送った際のURL hoge.com/search.php?keyword=hoge 修正後 hoge.com/kewyword_hoge.php そして、その際にやりたいことは、hoge.com/kewyword_hoge.phpをインデックスさせ このURLのページにアクセスしてきたときにhoge.com/search.php?keyword=hogeを 実行するようにしたいのですが、これって可能でしょうか? 静的URL変換自体は問題ないのですが、 hoge.com/kewyword_hoge.phpにアクセスしてもhoge.com/search.php?keyword=hoge を実行してくれず困っております。 恐れ入りますが、解決策をご教授いただけませんでしょうか? 何卒宜しくお願いします。 また、私のやりたいことは以下のサイトで参考になります。 ■インデックスされているURL(google) http://j-sen.jp/kanto/keyword_%E3%81%86%E3%81%A9%E3%82%93.htm ■サイト内検索のURL http://j-sen.jp/search/?area=kanto&nmin%5Bname%5D=&nmin%5Btime%5D=&nmin%5Bn%5D=&wage=&freeword=%E3%81%86%E3%81%A9%E3%82%93&day=&hour=&feature%5B%5D=&feature%5B%5D=&medical=1&except_medical=0&x=82&y=22 どちらも検索結果は同じですが、サイト内検索のURLを静的化し、 google先生にインデックスさせています。 お手数ですが、改めて解決策のご教授お願い申し上げます。

    • 締切済み
    • PHP

専門家に質問してみよう