SQLについて質問です。


現在指定した行を、管理番号を基に抽出するSQL命令を行いたいのですが、どのように行えばいいかわかりません。

時間があるかたで詳しい方おりましたら、以下のデータ状況を基に回答をお願いします。

以下がデータとします。

http://oskuni7.sakura.ne.jp/hatena/question23/question23.htm


例として

1行目から5行目のデータ1~5を

5行目から10行目のデータ1~5を

5行目から20行目のデータ1とデータ4だけ

を抽出する3パターンを教えて欲しいです。

お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:2009/03/19 11:21:36
  • 終了:2009/03/20 15:05:10

ベストアンサー

id:kn1967 No.1

kn1967回答回数2915ベストアンサー獲得回数3012009/03/19 11:42:33

ポイント100pt

(1)1行目から5行目のデータ1~5

SELECT DATA1, DATA2, DATA3, DATA4, DATA5
FROM テーブル名
WHERE KANRI_NO BETWEEN 1 AND 5;

(2)5行目から10行目のデータ1~5を

SELECT DATA1, DATA2, DATA3, DATA4, DATA5
FROM テーブル名
WHERE KANRI_NO BETWEEN 5 AND 10;

(3)5行目から20行目のデータ1とデータ4だけ

SELECT DATA1, DATA4
FROM テーブル名
WHERE KANRI_NO BETWEEN 5 AND 20;

質問文に対する直接的回答としては以上ですが

コメント欄の「1ページあたり20のデータを出力表示したい」については

もう少し具体的説明が必要です。

id:aiomock

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

2009/03/19 12:53:00
  • id:aiomock
    このSQL文を基にページ毎にデータを出力するページを作成したいと考えております。

    1ページあたり20のデータを出力表示したいと考えています。
  • id:khazad-Lefty
    補足要求です
    「ページ」はWebページ?
    使用している言語、DB、OS(、Webサーバー)等は?
  • id:Mook
    回答オープン不要です。

    kn1967 さんので十分ですね。
  • id:ku__ra__ge
    私の回答もid:kn1967さんと同じです。
    ちなみに「管理番号が1~5のデータ」ならば kanri_no BETWEEN 1 AND 5 とかの条件で取得できますが、どこかの列の値が大きい順に並べて「1行目~5行目のデータ」がほしいのであれば、データベースの種類ごとに必要な書式が異なりますので利用しているDBが何か教えていただければと思います。
  • id:kn1967
    http://q.hatena.ne.jp/1236183390 の流れなので
    DBは MySQL のままだと思います。

    ページ毎って事なので limit 使うとか他の方法のほうが適切かもしれませんが
    質問本文に答えるって事で回答本文のような例を挙げました。

    本文末尾にも書きましたが、コメント欄に書いておられる部分について
    もう少し具体的に説明いただければと思うのですが・・・。
  • id:aiomock
    kn1967さん

    Mookさん

    ku__ra__ge さん

    ご回答真にありがとうございます。

    DBですがMYSQLになります。

    どのようなページを作成するかとのことですが、イメージの中のものを作成してみました。

    http://oskuni7.sakura.ne.jp/hatena/question23/page.html

    上記にSQLのデータを持ってきたいと考えております。

    MYSQLのデータの1から20行目のデータをページ1に、21行目から40行目をページ2に、41行目から60行目までをページ3に持ってきたいと考えています。

    管理番号を基準に表示するだけであれば、今回、回答頂いたSQL命令文を実行すればできそうなのですが、

    今後データを削除したりすることができる機能を追加しようとすると

    一ページ20行の表示設定が、

    1ページでは全部で19行しか見えない、2ページ目では17行、3ページでは19行しか見えないなどといったようにばらばらになってきそうな気がするのですが、

    削除を行ってもページ毎に20行ずつデータをHTMLで繰り上げて表示する様なことは可能でしょうか?
  • id:aiomock
    khazad-Lefty さん

    ページはWEBページ、DBはMYSQL、使用しているサーバーはさくらサーバーになります。
  • id:kn1967
    >削除を行ってもページ毎に20行ずつ

    やはり・・・そういう話になってきますよね。
    単純な方法としては先だってコメントした LIMIT が使いやすいです。

    SELECT DATA1, DATA2, DATA3, DATA4, DATA5
    FROM テーブル名
    ORDER BY KANRI_NO
    LIMIT 0, 20;

    KANRI_NOで昇順に並べられた状態で
    ゼロ番目(1ではなくゼロから数える)から20レコード分を抽出
    という意味になってます。後は適宜数値を変えてください。
  • id:kn1967
    LIMIT句はMySQLやPostgreSQLなどでは使えますが
    ORACLEやSQLServer、DB2、Accessなどでは使えません。

    さらに、MySQLではLIMIT 0, 20ですが
    PostgreSQLではLIMIT 20 OFFSET 0となり書き方が変わります。

    SQLと一口に言っても方言がかなり違う場合がありますので
    DB名とバージョンなどの環境説明は必須な訳です。
    (phpのバージョンやWebサーバなどが関係するかどうかは話の内容によりますが
    質問文字数の制限内であれば書いておくと互いに手間を省ける場合が多々あります。)

    以上、余談ですが、ご記憶を。
  • id:Mook
    前にもコメントしましたが、aiomock さんが今回やろうとしていることは、
    多くの人がやっていることであり、一般の PHP の入門書にサンプルとして
    扱われる内容です。

    このような問題を質問を繰り返してワンステップずつ進めるよりも、サンプルを
    一度入力して実行してみれば仕組みはわかりますから、その上で自分に合った
    カスタマイズをしてはどうでしょうか。

    それについて質問をするのであれば、効率的かと思います。


    私も入門時に使った本(初版でしたが)ですが「PHP によるWebアプリケーション スーパーサンプル」
    http://www.nishi2002.com/phpsample/
    http://www.amazon.co.jp/gp/reader/479733245X/ref=sib_rdr_toc?ie=UTF8&p=S00A&j=0#reader-page
    の14-4はまさに、今回の例のサンプルです。
  • id:aiomock
    kn1967 さん

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

    実際に実行できました。

    DB名とバージョンなどの環境説明が必須な訳も理解できました。

    ありがとうございます。

  • id:aiomock
    Mookさん

    サンプルが一杯載っていてこれはすごい本だと思いました。

    思わずアマゾンで購入させていただきました。

    まずは色々なパターンの仕組みや機能を理解することが大事ということですね。

    PHPに関する知識をこの本で深めていきたいと思いました。

    勉強してみます。
  • id:Mook
    頭から読むより(もちろん興味のある部分はどんどん読めば良いですが)、
    今回のようにやりたいことができたときに、その部分を読んだり参考に
    してはどうでしょうか。

    自分でWEBページを作ろうというためには、多くの知識が必要ですから、
    気がつけば多くのページに目を通していることでしょう。

    ときに辞書のような文法書もよいですが、応用を通して実践するのが早道だと
    思います。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません