<SQL ORDER BYでデータの並べ替え> こんにちは、Ken3です。 データベースにアクセスできたら、 次はデータの並べ替えでしょ。 今回はデータの並べ替え(ソート)を SQLのORDER BYを使ってやってみます。 ^^^^^^^^^^^^^^ といっても、たいしたことないのでご安心を。 /* * 1.やりたいこと、データを並べ直したい */ データベース名:db026.mdb テーブル名:TEST フィールド ID オートナンバー型 F_TITLE テキスト型 F_MEMO テキスト型 WriteTime 日付型 の中身を条件指定無しで表示は、 http://www.ken3.org/cgi-bin/test/test026-1.asp で、味気ないけど出来ました。 用途に応じて、データの並び順を変えて出力したいよね。 そんなことをやりたいので、 SELECT 文の ORDER BY を使ってみます。 /* * 2.ORDER BY ? */ ORDER BY ?って何? SQLのSELECT文で指定すると、出力結果を並べ替えてくれます。 Select * From TEST ORDER BY F_TITLE みたいに、並べ替えを行うフィールドを指定します。 なんだぁ、意外と簡単なんだね。 タイトルで並べ替えを行ったサンプル、 http://www.ken3.org/cgi-bin/test/test028-1.asp <%@LANGUAGE=VBScript%> <html> <head> <title>ORDER BYで並べ替える</title> </head> <body> <h2>ORDER BYで並べ替える</h2> test028-1.asp<br> <hr> <% '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("db026.mdb") 'やっとデータベースを開ける db.open 'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定 'ORDER BY F_TITLEを追加しただけです。 Set rs = db.Execute("Select * From TEST ORDER BY F_TITLE") 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しをバカっぽく、そのまま書き込む Response.Write "<TR>" Response.Write "<TD>ID</TD>" Response.Write "<TD>F_TITLE</TD>" Response.Write "<TD>F_MEMO</TD>" Response.Write "<TD>WrietTime</TD>" Response.Write "</TR>" 'お約束のEOFまでループは(データが無くなるまでループ)、 Do While rs.EOF = False 'レコードセットの.EOFがFalseの間 Response.Write "<TR>" '内容を表示する Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_TITLE") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>" Response.Write "</TR>" '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 Loop Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing %> <hr> 終了です。<br> </body> </html> ポイントは、 ^^^^^^^^^^ 'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定 'ORDER BY F_TITLEを追加しただけです。 Set rs = db.Execute("Select * From TEST ORDER BY F_TITLE") 変更点は、ORDER BY F_TITLEと項目名を追加しただけです。 ねっ、簡単でしょ。 /* * 3.あんなに苦労した逆順並べ替えも、DESCキーワード1つで、、、 */ 私がテキストファイルの処理で、逆にデータを読めない、、 と苦労した処理も、 ( 詳細は、http://www.ken3.org/backno/backno_asp05.html#23 の、[No.23 苦肉の策、配列をリングみたく使ってみた]を参照 ) ORDER BY 句には、DESCキーワードってあって、これを指定するだけで、 データを降順でオーダーしてくれます。 Select * From TEST ORDER BY F_TITLE DESC こんなんでOKです。 紙面のムダだけど、ソースを載せると、 <%@LANGUAGE=VBScript%> <html> <head> <title>ORDER BYで並べ替え DESCで降順です</title> </head> <body> <h2>ORDER BYで並べ替え DESCで降順です</h2> test028-2.asp<br> <hr> <% '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("db026.mdb") 'やっとデータベースを開ける db.open 'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定 'ORDER BY ID DESCを追加しただけです。 Set rs = db.Execute("Select * From TEST ORDER BY ID DESC") 'データの表示をテーブルで行う Response.Write "<TABLE Border='1'>" '見出しをバカっぽく、そのまま書き込む Response.Write "<TR>" Response.Write "<TD>ID</TD>" Response.Write "<TD>F_TITLE</TD>" Response.Write "<TD>F_MEMO</TD>" Response.Write "<TD>WrietTime</TD>" Response.Write "</TR>" 'お約束のEOFまでループは(データが無くなるまでループ)、 Do While rs.EOF = False 'レコードセットの.EOFがFalseの間 Response.Write "<TR>" '内容を表示する Response.Write "<TD>" & rs.Fields.Item("ID") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_TITLE") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("F_MEMO") & "</TD>" Response.Write "<TD>" & rs.Fields.Item("WriteTime") & "</TD>" Response.Write "</TR>" '次のレコードにポインタを移動する rs.MoveNext 'これを忘れると悲惨なことに、、、 Loop Response.Write "</TABLE>" 'テーブルは終わりです '開いていたレコードセットを閉じる rs.Close 'データベースも閉じようよ db.Close 'お行儀よくオブジェクトも開放しましょう(通常は自動的に解放されるけど) Set db = Nothing %> <hr> 終了です。<br> <A href="test026-1.asp">test026-1.asp db026.mdb内のデータを確認する</a><br> <A href="test027-2.asp">test027-2.asp データを追加する</a><br> <A href="test028-1.asp">test028-1.asp TITLEで並べ替え</a><br> </body> </html> ポイントは、 ^^^^^^^^^^^ 'お約束のレコードセットの作成 テーブル名TESTから全項目(*)を指定 'ORDER BY ID DESCを追加しただけです。 Set rs = db.Execute("Select * From TEST ORDER BY ID DESC") と、ID DESCを追加して、 IDの降順(逆順)でレコードセットが返ってきます。 あんなに苦労したのに、こんなんでいいの? って感じるくらい簡単ですよね。 SQL文、面白そうですか? それとも、 なんか自分には合わない? まぁ、相性あるけど、慣れれればなんとかなりますよ。 テストは、 http://www.ken3.org/cgi-bin/test/test028-2.asp で、降順で表示されます。 /* * 4.終わりの挨拶 */ 今回は、 ・ORDER BYで並べ替え(ソート) ・ORDER BY フィールド DESCで降順の並べ変え(大きい順) データを並べ替えてみました。 覚えてしまえば、 テキストファイルに書いてた時より楽ですね。 素朴な疑問あったら、気軽に、 メール、掲示板に書き込んでくださいね。 ASP、VBScript勉強中の三流プログラマーのKen3でした。
ここまで、読んでいただきどうもです。目的の情報が見つかったか?少々心配しつつ、、、
感想や質問・要望・苦情など 三流君へメッセージを送る。
下記のフォームからメッセージを送ることができます。
[三流君(TOP ken3.org へ戻る)]
/ [ASPで遊ぶ、失敗する]
/ [ASP記事 バックナンバー目次]
まぁ、基本はデータの受け取りかなぁ。
・[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記事 バックナンバー目次]