[方法]の検索結果
「先頭からn件のレコード(結果セット)だけ取得する方法が知りたい。」というのは、データベース関連のメーリングなどで以前からよくある質問ですが、SQL ServerやOracle、MySQL、PostgreSQLなどRDBやバージョンによって利用可能な方法がそれぞれ異なるので簡単にまとめてみました。
Microsoft SQL Server 7.0 以降
Microsoft SQL Server 7.0 以降 では TOP が使用できるので、
SELECT TOP 10 *
FROM Table1
ORDER BY Field1
と記述することによって、先頭から上位10件の結果セットを取得することができます。
Oracle8i R8.1.5 以降
Oracle8i R8.1.5 以降ではサブクエリー内で ORDER BY が使用できるようになったので、例えば Field1 の昇順に上位10件を取得するような場合は、
SELECT *
FROM (SELECT * FROM Table1 ORDER BY Field1) A
WHERE ROWNUM <= 10;
と記述することによって、先頭から10件の結果セットを取得することができます。
MySQL
MySQLの場合は以下のようにLIMIT句を使用することで、指定した位置(先頭からの場合は0)から指定した件数のレコードを取得することができます。
SELECT * FROM Table1
ORDER BY Field1
LIMIT 0, 10;
PostgreSQL
PostgreSQLの場合は以下のようにLIMITとOFFSETを指定することで、
OFFSETで指定した位置から、LIMIT数分のレコードを取得することができます。
SELECT * FROM Table1
ORDER BY Field1
OFFSET 0 LIMIT 10;
その他のRDB
また、不運にも上記以外の RDB を使用しなければならない場合でも、以下のようなSQL文で、Table1 から Field1 の昇順に Field1, Field2, Field3 の結果セットを先頭から10件取得することができます。
SELECT DISTINCT COUNT(*), A.Field1, A.Field2, A.Field3 FROM Table1 A, Table1 B
WHERE (A.Field1 >= B.Field1)
GROUP BY A.Field1, A.Field2, A.Field3
HAVING COUNT(*) <= 10;
(追記あり)
オンラインショップの商品が注文された際に顧客に注文内容の確認メールを送信したり、掲示板にコメントが書き込まれた際に管理人宛てに通知メールを送信したりするには、フォームで入力された項目の内容をCGIからメールとして送信する必要が あります。
一般的なレンタルサーバーでCGIからメールを送信する場合の基本的な処理手順は次のようになります。
1.フォームから入力された各項目の値をパラメータから取得
2.subject(件名)をMIME-Base64形式に変換
3.メッセージを作成
4.メール送信する文字列の文字コードをJISに変換
5.sendmailを使用してメールを送信
下記のCGIスクリプト(UTF-8)はレンタルサーバー等で利用可能なsendmailを使用してフォームから入力された、Subject、宛先メールアドレス、差出人、本文を使用してメールを送信するサンプルプログラムです。
--- mailform.html (入力フォーム) ---
<html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>メールフォーム</title> </head> <body> <h1 class="title">メールフォーム</h1> <form method="post" action="sendmail.cgi"> <input type="hidden" name="a" value="exec"> 件名(Subject) :<br /> <input type="text" name="subject" size="80" value=""><br /> 宛先(To) :<br /> <input type="text" name="to" size="80" value=""><br /> 差出人(From) :<br /> <input type="text" name="from" size="80" value=""><br /> 本文(Body) :<br /> <textarea name="body" rows="10" cols="65"></textarea><br /> <p> <input type="submit" value="送信"> </p> </form> </body> </html>
--- sendmail.cgi (メール送信CGI) ---
#!/usr/bin/perl
use strict;
use warnings;
use CGI;
use Encode;
my $cgi = CGI->new();
# パラメータからフォームの入力値を取得
my $subject = $cgi->param('subject');
my $to = $cgi->param('to');
my $from = $cgi->param('from');
my $body = $cgi->param('body');
# subject(件名)をMIME-Base64形式に変換
$subject = Encode::encode('MIME-Header-ISO_2022_JP', $subject);
# メッセージを作成
my $message = <<"END_MESSAGE";
From: $from
To: $to
Subject: $subject
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
$body
END_MESSAGE
# メール送信する文字列の文字コードをJISに変換
Encode::from_to($message, 'utf8', '7bit-jis');
# sendmailを使用してメールを送信
my $sendmail_path = '/usr/sbin/sendmail'; # sendmail path
open my $mailh, "| $sendmail_path -t -oi $to";
print {$mailh} $message;
close $mailh;
# 送信終了を表示
my $html = <<"END_HTML";
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<title>送信終了</title>
</head>
<body>
<p><big>送信終了</strong></big></p>
</body>
</html>
END_HTML
print "Content-Type: text/html\n\n", $html;
なお、フォームからのパラメータの受け取りにはCGIモジュールを、メール本文の文字コードの変換やsubject(件名)のMIME-Base64形式への変換にはPerl 5.8以降では標準モジュールなっているEncodeモジュールを使用しています。
また、このサンプルでは、処理手順をわかりやすくするために、入力チェックなどの実際に運用する場合に必要な 処理を行ってませんが、入力チェック処理も含まれたより実用的なシンプルな メールフォームCGIの無料配布(ライセンスはGPL)も行っていますので、よろしければご活用ください。
プロフェッショナルの条件―いかに成果をあげ、成長するか
今や唯一の意味ある競争力要因は、知識労働の生産性であり、それを左右するのが知識労働者である。自分の能力を見極め、伸ばすための簡単な方法を著者自らの体験をもとに紹介。
今や唯一の意味ある競争力要因は、知識労働の生産性であり、それを左右するのが知識労働者である。自分の能力を見極め、伸ばすための簡単な方法を著者自らの体験をもとに紹介。
CGI(Common Gateway Interface)とは、Webサーバーがプログラムを起動する方法(環境変数の名前や値)を定めた仕様のことである。CGI関連の主なサイトとほほのWWW入門HTML、JavaScript、CGI、スタイルシート、ダ...
Java(ジャバ)とは、Sun Microsystems社が開発したオブジェクト指向プログラミング言語で、C++言語に似た文法で、強力なセキュリティ機構や豊富なネットワーク関連の機能が標準で搭載されている。 Sun Microsystems...
株式公開買い付けのことで、不特定多数の株主に対し公告により株券の買い付け申し込みを行うこと。有価証券報告書を提出している会社の株式を証券取引所を通じないで取得するには、原則としてこの方法でなければなら...
削除されました
削除されました
削除されました
削除されました
アクセスランキング
今日のアクセスランキング TOP 10
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (6 PV)
- [FX]高値更新・安値更新でエントリー、MT4向け無料スキャルピングEA「1Scalper」#システムトレード (5 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (5 PV)
- 仲値トレードが簡単にできる無料EA「NAKANE3」 #MT4 (5 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (4 PV)
- Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (2 PV)
- 「電通の正体」 マスコミ最大のタブー (2 PV)
- FC2まとめ (2 PV)
- 有名まとめサイトの管理人「JIN」さんが株、FXで約-8000万の大損失 #もうダメだ、終わった (2 PV)
- NEKONEKO FREEの配布は終了しました (2 PV)
今月のアクセスランキング TOP 10
- SQLのSELECT文で先頭から上位(TOP)10件のレコードを取得する方法(SQL Server、Oracle、MySQL、PostgreSQL) (69 PV)
- 2NN 2ちゃんねるニュース速報+ナビ (19 PV)
- Google Finance(グーグルファイナンス)- リアルタイム株価情報、金融ニュース、日本株 (13 PV)
- 自作のMT4向け無料EA(口座縛り無し、ブローカー縛り無し、使用期限無し)とゴゴジャン出品中の有料EAの一覧 #MT4 (12 PV)
- [FX]裁量ポジションを簡単に管理できるMT4向け無料の裁量補助EA「PositionKeeper」 (10 PV)
- [FX]高値更新・安値更新でエントリー、MT4向け無料スキャルピングEA「1Scalper」#システムトレード (9 PV)
- 裁量トレードを半自動化する無料のMT5向け裁量トレード支援ツール(裁量補助EA)「PositionKeeper MT5」 #FX (9 PV)
- FC2WiFI (8 PV)
- FC2まとめ (7 PV)
- [PR]noteで販売している自作EAの一覧 (7 PV)
アクセス統計
ディレクトリ
関連サイト