[三流君] −−> [ASPで遊ぶ、失敗する] −−> [バックナンバー一覧]
−−> No.087 ADO SQL Like演算子で部分検索する

ADO SQL Like演算子で部分検索する



本文(発行内容)


<ADO SQL Like演算子で部分検索する>

こんにちは、三流プログラマーのKen3です。 今回は、Like演算子で部分検索を行ってみます

/* * 1.今回のキッカケ */

掲示板 でもらった質問、処理していないのがあるので、 1つ1つやらないとなぁと思いつつ・・・

/* * 2.Like演算子を使用した検索 */

SQL Select Where文で、検索したりしてました。 Select * From KANSOU WHERE F_KUBUN = 'ASP' ORDER BY WriteTime DESC http://www.ken3.org/cgi-bin/test/test030-1.asp?KUBUN=ASP と F_KUBUN フィールドが'ASP'のデータをセレクトしたり Select * From KANSOU Where F_KUBUN = 'ASP' OR F_KUBUN = 'VBA' ORDER BY WriteTime DESC http://www.ken3.org/cgi-bin/test/test046-1.asp?ASP=on&VBA=on や Select * From KANSOU WHERE F_KUBUN IN ('ASP', 'VBA') ORDER BY WriteTime DESC http://www.ken3.org/cgi-bin/test/test046-3.asp?KUBUN=ASP&KUBUN=VBA で、 F_KUBUNが'ASP'か'VBA'のデータをセレクトしたり。 > 10 で10より上, < 20 で20より下と数値も普通に使えたりします。 あとは、部分的にデータが一致したら、検索したい、そんな要望もあると思います。 例えば、 http://www.ken3.org/cgi-bin/test/test083-1.asp で Select TOP 20 URL, Count(URL) As URLCNT From log GROUP BY URL   ORDER BY Count(URL) DESC とSQL文を発行して、TOP20の合計値を出力しています。 No. URL 訪問者件数 1 /etc/ranking/auto_04.html 639人 2 /etc/500yen/ebank.html 591人 3 /etc/ranking/hobby_07.html 478人 ・ ・ ・ ・   ・ ・ 18 /etc/pc.html 206人 19 /etc/ranking/media_07.html 199人 20 /etc/ranking/hobby_06.html 189人 これだと、全てのデータのランキングです。 これを、hobby_XXだけを出力したい、そんな時があると思います。 そんな時に便利なのが、 Like 演算子です。 Where フィールド Like '%hobby%' と 指定すると、フィールドにhobbyが含まれているデータを取得してくれます。 http://www.ken3.org/cgi-bin/test/test087-1.asp?q=drink と q=XXXXみたいにURLに載せたパラメータを取得して、 SQL文を作成してみたいと思います。

/* * 3.作成したサンプル */

えっと、まずは、 http://www.ken3.org/cgi-bin/test/test087-1.asp?q=pc みたいに、q=の値を受け取らないとなぁ。 SQL文の作成時に、 Request.QueryString("q") の値があるか、チェックして、存在したときにLike演算子を使用します。 ※強引に受け取ったパラメータに%を追加してます。 'TOP20を指定 Where URL LIKE '%XXX%'で条件を指定する strSQL = "Select TOP 20 URL, Count(URL) As URLCNT " strSQL = strSQL & "From log " 'パラメータをチェックする(test087-1.asp?q=xxxxxでもらう) qqq = Trim(Request.QueryString("q")) '両端のスペースを除いて受け取る If qqq <> "" Then 'データありの時、Like演算子の条件を追加する strSQL = strSQL & "Where URL Like '%" & qqq & "%' " Response.Write "条件[" & qqq & "]を受け取りました<br>" Else Response.Write "q=のパラメータが無かったよ(笑)<br>" 'データ無しの時 End If strSQL = strSQL & "GROUP BY URL " strSQL = strSQL & "ORDER BY Count(URL) DESC" こんな感じで、SQL文を作成して、発行してます。 あとは、再検索用に、 <FORM ACTION="test087-1.asp" METHOD="GET"> 絞り込む検索条件を入れて、再検索ボタンを押してください。<br> 検索条件:<INPUT TYPE="TEXT" NAME="q" VALUE="<%=qqq%>"> <INPUT TYPE="submit" VALUE="再検索"><br> ※例)pc auto drink 500yenなどなど、URLの一部を入力<br> </FORM> と METHOD="GET"でフォームを作成して、 <INPUT TYPE="TEXT" NAME="q" VALUE="<%=qqq%>"> で条件を入力させ、 ACTION="test087-1.asp"の指定で、自分自身を再度コールしてます。 http://www.ken3.org/cgi-bin/test/test087-1.asp?q=old http://www.ken3.org/cgi-bin/test/test087-1.asp?q=500yen http://www.ken3.org/cgi-bin/test/test087-1.asp?q=fashion などで下記のプログラムのテストが出来ます。 test087-1.asp <%@LANGUAGE=VBScript%> <html> <head> <title>SQL SELECT WHERE句で Like演算子を使用して部分検索する</title> </head> <body> <!-- Ken3 --><!-- #include file="info.inc" --> <h1>SQL SELECT WHERE句で Like演算子を使用して部分検索する</h1> test087-1.asp<br> <hr> cnt_etc.mdb から訪問されたURLをグループ化して集計、降順に表示<br> <strong>Like演算子</strong>でデータを絞り込んでみました。<br> Select TOP 20 URL, Count(URL) As URLCNT 〜<br> <font color="red">Where URL <strong>Like</strong> '%XXXX%'<br> と受け取ったq=を設定してみます</font><br> <% 'ADO DB Connection オブジェクトを作成する、英文そのままじゃん Set db=Server.CreateObject("ADODB.Connection") '.Provider?プロバイダー?通信会社?じゃなくって 'データアクセスにはJet.OLEDB.4.0を使うことを設定 db.Provider = "Microsoft.Jet.OLEDB.4.0" '次に、接続DBの位置を渡すので、Server.MapPathで変換して渡す db.ConnectionString = Server.MapPath("cnt_etc.mdb") 'やっとデータベースを開ける db.open 'お約束のレコードセットの作成 'GROUP BY句 で グループ化 Count関数で集計 ORDER BY句で並べ替え 'TOP20を指定 Where URL LIKE '%XXX%'で条件を指定する strSQL = "Select TOP 20 URL, Count(URL) As URLCNT " strSQL = strSQL & "From log " 'パラメータをチェックする(test087-1.asp?q=xxxxxでもらう) qqq = Trim(Request.QueryString("q")) '両端のスペースを除いて受け取る If qqq <> "" Then 'データありの時、Like演算子の条件を追加する strSQL = strSQL & "Where URL Like '%" & qqq & "%' " Response.Write "条件[" & qqq & "]を受け取りました<br>" Else Response.Write "q=のパラメータが無かったよ(笑)<br>" 'データ無しの時 End If strSQL = strSQL & "GROUP BY URL " strSQL = strSQL & "ORDER BY Count(URL) DESC" 'オマケで画面にデータ表示 Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>" Response.Write strSQL & "</font></B><br>です<hr>" Set rs = db.Execute(strSQL) 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しをバカっぽく、そのまま書き込む Response.Write "<TR>" Response.Write "<TD>No.</TD>" Response.Write "<TD>URL</TD>" Response.Write "<TD>訪問者件数</TD>" Response.Write "</TR>" 'EOFまでループ nCNT = 1 Do While rs.EOF = False '.EOFがFalseの間 Response.Write "<TR>" '内容を表示する Response.Write "<TD>" & nCNT & "</TD>" Response.Write "<TD><A HREF='" & rs.Fields.Item("URL") & "' Target='_top'>" Response.Write rs.Fields.Item("URL") & "</A></TD>" Response.Write "<TD ALIGN=RIGHT>" & rs.Fields.Item("URLCNT") & "人</TD>" Response.Write "</TR>" & Chr(13) & Chr(10) '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 'カウンタを増やす nCNT = nCNT + 1 Loop Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing %> <hr> <FORM ACTION="test087-1.asp" METHOD="GET"> 絞り込む検索条件を入れて、再検索ボタンを押してください。<br> 検索条件:<INPUT TYPE="TEXT" NAME="q" VALUE="<%=qqq%>"> <INPUT TYPE="submit" VALUE="再検索"><br> ※例)pc auto drink 500yenなどなど、URLの一部を入力<br> </FORM> </body> </html>

/* * 4.Access97時代の*と間違えたことも在り */

お約束のネタだけど、 URL Like '*pc*' だと、ADOのSQLだとダメです。 けっこう、引っかかると思うので、%って感じで頭に入れて置いてください。 ※SQLの解析エンジンによって、違ったりするので、マニュアルみるかな・・・ http://www.microsoft.com/japan/developer/library/vdtsql/dvconusingwildcardcharacters.htm も参考にしてくださいね。

/* * 5.終わりの挨拶 </HTML> */

今回は、Like演算子を軽く書きました。 掲示板にあったのは、削除条件指定とページ送りでしょギク・・・ ハヤメにかたずけないと・・・ いろいろと問題点を残しつつ、脱線・寄り道の多いメルマガですが、 今後とも、よろしくお願いします。 何かの参考となれば幸いです。 ASP、VBScript勉強中の三流プログラマーのKen3でした。


ページフッター

ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、

三流君へ メッセージを送る

感想や質問・要望・苦情など 三流君へメッセージを送る。
返信例 XXXXさんへ
下記のフォームからメッセージを送ることができます。


あなたのお名前(ニックネーム):さん
返信は?:

アドレス:に返事をもらいたい
感想や質問↓:


(感想や質問・要望・苦情はHPで記事に載せることがあります。)

種類別のリンク や 広告など

[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


Blogとリンク:[三流君のMemo別館]/ [ASP 三流君のソースコード置き場]/ [Ken3Video YouTubeで動画解説]
広告:

気になった ジャンル ↓を選択してください。

まぁ、基本はデータの受け取りかなぁ。
・[Form等を使用したデータのやり取り]・・・ASPと言っても、HTMLの入力フォームからデータを受け取ります。POSTやGETでやりとりを押さえますか。

次は、データの入出力 で ADOを使った(ADOで接続) と SQLの解説を少々
・[ADOでMdbファイルを使う]・・・MDBと接続して、簡単な追加・更新・削除を行った。
・[ADOでExcelと接続してみた]・・・.xlsと接続してSQLを使ってみた。
・[ADOでCSVと接続してみた]・・・.CSV テキストを読み出した。※更新・削除はできません

広告:



DBが使えるので、あまり使用しないけど、普通のテキストファイル処理
・[テキストファイル処理]・・・ファイルを開いて、書き込む。1行読み込みなどを軽く

VBScriptでFormat関数が無いなど、微妙にVBAと違うけど
[VBScript関数関係の説明]・・・少し、処理を書いてみた。
[その他処理サンプル]・・・あまり良いサンプル作れなかったけど。。。
何かの参考となれば幸いです。



[三流君(TOP ken3.org へ戻る)] / [ASPで遊ぶ、失敗する] / [ASP記事 バックナンバー目次]


広告: