• 締切済み

SQLで。

webでphpを使ってpostgreSQLのデータを表示させています。 pgSQLのデータベース、「テーブルA」があります。 そこで「テーブルA」のデータを引っ張ってくるときに最後の50件だけを表示させたい場合は どういったSQL文だとそのデータを引っ張ってこれるのでしょうか? それともSQLでテーブルAのデータを全部引っ張ってきたあとphpで最後の50件だけ表示させないとだめなのでしょうか? ちなみに「テーブルA」にはフィールド名、「code」と言うフィールドにオートナンバー型のデータが 「1~n」あります。 初心者なのでうまく説明できなくて申し訳ありませんが 良いやり方がありましたら宜しくお願いしします。 PostgreSQL 7.0.2 PHP4

  • PHP
  • 回答数4
  • ありがとう数3

みんなの回答

  • youki64
  • ベストアンサー率33% (3/9)
回答No.4

下記timberさんの補足 select * from tableA order by code DESC offset 0 limit 50; postgreSQLではこれでOK

  • timber
  • ベストアンサー率29% (218/739)
回答No.3

postgreSQLって使ったことないので、間違ってるかもしれません。 select * from (select * from tableA order by code) offset 0 limit 50; もしくは select * from tableA where code >= (select max(code)-50 from tableA); でどうでしょうか。

  • J_ANBI
  • ベストアンサー率48% (24/49)
回答No.2

すみません。 補足です。 相変わらず、試していないのですが・・・。 pg_fetch_Array(コネクションID,取得したい行) という形式で指定すると、結果セットの途中から アクセスできるようですね。 逆順にソートしなくてもいいので、こっちのほうが 見栄えがいいかもしれませんね。

参考URL:
http://www.php.net/manual/ja/ref.pgsql.php
  • J_ANBI
  • ベストアンサー率48% (24/49)
回答No.1

現在、手元に実行環境がありませんので、試 していませんが・・・。 SQLに「ORDER BY 列名 DESC」をつけてくだ さい。 これで、データが逆順にソートされますから、 pg_fetch_array等で、取得する処理を50回繰 り返せば可能かな、と思います。 外してたらごめんなさい。

関連するQ&A

  • ハガキ交換データのSQL文

    下記のような葉書のデータベースでのSQL分についてお尋ねします。 Parsonals データベースに、 年賀状と暑中見舞いとのデータテーブル(Cards)のほか、 個人データテーブル(Individuals)と 家族データテーブル(Family)と 住所データテーブル(Address)との4つのテーブルがあります。 4つのテーブルは、次のように構成されています。 Individuals, Family, Address, Cards です。 1.Individuals テーブルは、 ID (オートナンバー), Name (文字列), FamilyID (数値), AddID (数値) の4つのフィールド 2.Family テーブルは、 FamilyID (オートナンバー), FamilyName(文字列) の2つのフィールド 3.Address テーブルは、 AddID (オートナンバー), Address(文字列), Telephone(文字列) の3つのフィールド 4.Cards テーブルは、 CardID(オートナンバー), KindOfCard(YesNo), SendYear(数値 ヌル値許可), ReceiveYear(数値 ヌル値許可), IndividualID (数値) の5つのフィールド です。 個人データすべてのほか、個人ごとの家族データすべて、個人ごとの住所データすべて、 そして、個人ごとのKindOfCard(年賀状か暑中見舞いか)ごとにSendYearデータのうち最新のものと ReceiveYearデータのうちの最新のものを取得するSQL文を取得したいのです。 簡単にいえば、 個人個人に対して、その個々人の個人データ・家族データ・住所データのほか、 年賀状を送った最新の年と受けた最新の年、 暑中見舞いを送った最新の年と受けた最新の年を取得したいのです。 さらに、最新の送った年と最新の受けた年とが同一のときは、データが重複しますので一つに絞りたいです。 Cardsテーブルのフィールドには、SendYearもReceiveYearもありますので、単純にSendYearとReceiveYearを切り分けると当然データが重複するので、この重複は避けたいです。 このように毎年の葉書のやり取りを記録したデータから必要なデータを取り出したいというものです。私にとっては来年の年賀状を送るにあたって、どの人に出すべきかを判断する材料として、ぜひ取りだしたいビューなです。 かなり複雑なSQL文になるのかもしれませんが、どんなSQL文かを教えてください。 ぜひ、よろしくお願いします。

  • すでにあるsqlファイルを使用して、データベースを作成する方法

    すでにあるsqlファイルを使用して、データベースを作成する方法 もらったシステム(html,php,sqlで構成されるシステム)を自分の環境で動かそうとしているのですが、データベースを作成できないため、先に進むことが出来ず困っています。 もらったシステムには、テーブルのsqlファイルや、そのテーブルに入れるデータのsqlファイルがありました。 わかりにくい文章ですいません。 どなたかご存じの方、ご教授お願いいたします。 OS: CentOS5.3 postgresql8.1.18 apache2.2.3 php5.1.6

  • timestamp型の表示

    PHPとPostgreSQLでサイトを作っています。 そこで、pgSQLの中にあるtimestamp型のフィールドから PHPでデータを取り出してます。 そのまま取り出すと、「2002-09-18 23:29:00+09」こういう形になります。 このデータを「02/09/18(Wed) 23:29」みたいに表示させたいのですが。。。 PostgreSQL 7.0.2 PHP4 初歩的な質問かもしれませんが宜しくお願いします。

    • ベストアンサー
    • PHP
  • SQL ?で終わる

    アクセスのSQL文で、テーブルのフィールドの値が、最後が?で終わるものを抽出したいのですが SELECT テーブル.フィールド FROM テーブル WHERE (((テーブル.フィールド) Like "[*?]")); これだと1件も抽出されません。 Like "[*?]"が間違ってると思うのですが、どうすればいいでしょうか?

  • Oracl の SQL文について

    Oracl の SQL文について、教えて下さい。 [A]テーブルに [CODE] と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE] と [DATE] と [MONEY] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [DATE]の条件を、2005/01/01~2005/01/31とし、結果を A-1 NAME-1 300 A-2 NAME-2 700 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? よろしくお願い致します。

  • オラクル+SQL Plus

    SELECT A FROM AAA WHERE ROWNUM<=5とSQLを実行すると 必ず5つ返ってくるとは限らないみたいで… テーブル名やフィールド名が分かっている状態で 何万件ものデータベースから指定した個数だけ返ってくるような SQL文があるのであれば教えてください。 個数さえ合っていれば順番は特に気にしません。 よろしくお願いします。

  • 別のサーバーにあるDBに対してSELECTした結果が帰ってこない。

    別のサーバーにあるDBに対してSELECTした結果が帰ってこない。 質問はタイトル通り、別のサーバーにあるDBに対してSELECTした結果が帰ってきません。 あるwebサイトを新しいサーバーに移行する事になりました。 データベースはwebサイトと同じサーバーに準備していたのですが 新しいサーバーに移行する際に別のサーバーに準備する事になりました。 そして新しい環境で動作検証をしていて特に問題なく進んでいたのですが・・・・ 旧環境では特に問題なくSELECTした結果が帰ってきていましたが 新しい環境ではデータ取得の際に件数が多くなるとSELECTした結果が帰ってきませんでした。 SELECTした結果は約7000件~30000件のデータを取得するようになっております。 (新しい環境で1000件近くのデータを取得しようとしたら約5分かかりました。) これはSQL文が悪いのでしょうか、それともphpの設定が悪いのか、postgresqlの設定が 悪いのか特定出来ずに困り果てております。。。 何でも構いませんのでご助言を頂けたら幸いです。 ■環境について □以前の環境 同じサーバー内にphpとpostgresqlがある Postgresqlのバージョンは8.0.3で、phpのバージョンは5.0.5です。 □現在の環境 別のサーバーにphpとpostgresqlがある Postgresqlのバージョンは8.1.18で、phpのバージョンは5.1.6です。 ■データ取得テーブル □テーブル名 テストテーブル □フィールド数 100 (登録時刻フィールドはタイムスタンプ型です) □SQL文例 Select * From テストテーブル Where 登録時刻フィールド >= 'yyyy-mm-dd' AND 登録時刻フィールド <= 'yyyy-mm-dd'

  • SQLのこと:distinctして並び替えたい

    select * from (select distinct on (aaa) * from bbb) as ccc order by ddd テーブルbbbのaaaというフィールドが重複せず、しかも他のフィールドで並び替えをしたかったら、このような書き方以外ありますか?データベースはPostgreSQLです。 この書き方で不都合が出ているというわけではありませんが、どう書けば、パフォーマンス的にも良いSQLになるか、詳しい方がいらっしゃいましたら、お願いします。

  • Access2000のSQL文の質問です。

    Access2000のSQL文の質問です。(長文) [OYA]テーブルに、OYA_CODE(KEY),OYA_NAMEのフィールドがあります。   データは、1 , A 2 , B です。 [KO]テーブルに、KO_CODE(KEY),KO_NAMEのフィールドがあります。   データは、11 , A-1 12 , A-2 13 , A-3 21 , B-1 22 , B-2 です。 [TENKAI]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 1 1 , 12 , 2 2 , 21 , 3 2 , 22 , 4 です。 [DATA]テーブルに、OYA_CODE(KEY),KO_CODE(KEY),CNTのフィールドがあります。   データは、1 , 11 , 10 1 , 12 , 20 2 , 21 , 100 2 , 22 , 200 です。 結果を OYA_CODE, OYA_NAME, KO_CODE, KO_NAME, KEI 1, A, 10 1, A, 11, A-1, 10 1, A, 12, A-2, 40 2, B, 100 2, B, 21, B-1, 300 2, B, 22, B-2, 800 と、したいのです。 つまり、[TENKAI]のCNT×[DATA]のCNT が、ほしいのです。 ネックは、OYA_CODEのみのレコードが出ないのです。 このテーブルにこう言うフィールドをつける等、 具体的にご支持を頂ければ幸いです。 宜しくお願い致します。

  • Oracl[10g]の SQL文について(No.6)

    何度も恐縮です。前回の質問(例題)が間違えていました。 本当に申し訳ございません。改めて、お願いしたい次第です。 Oracl[10g]の SQL文について、教えて下さい。 [C1]テーブルに [CODE](key) と [NAME]フィールドがあるとします。 内容は、 A-1 NAME-1 A-2 NAME-2 A-3 NAME-3 と、します。 [B]テーブルに [CODE](key) と [NOUKI](key) と [KIN] フィールドがあるとします。 内容は、 A-1 2005/01/01 100 A-1 2005/01/02 200 A-2 2005/01/01 300 A-2 2005/01/10 400 A-2 2005/12/10 500 と、します。 [C2]テーブルに [CODE2](key) と [NAME2] と [CODE] フィールドがあるとします。 内容は、 AAA NAME2-1 A-1 BBB NAME2-2 A-2 CCC NAME2-3 A-3 と、します。 [C3]テーブルに [CODE2](key) と [NO](key) と [KIN2] フィールドがあるとします。 内容は、 AAA 1 200 AAA 2 300 BBB 1 10 BBB 2 20 BBB 3 30 と、します。 結果が、 A-1 NAME-1 300[B]テーブルの合計 500[C3]テーブルの合計 A-2 NAME-2 1200[B]テーブルの合計 60[C3]テーブルの合計 と、なる様にする為には、どういうSQL文を書けば良いのでしょうか ? 前回、教えて頂いた例を参考に頑張っているのですが、 まだ、私には難しすぎる様です。 よろしくお願い致します。

専門家に質問してみよう