人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

SQLについて質問です。

検索画面にてページング機能を実装しています。
DBにAccessを使用しているためLimit句が使用できずTOP句で代用しています。

SELECT TOP 30 * FROM テーブル名 WHERE (KANRI_NO >= (SELECT MAX(KANRI_NO) FROM
(SELECT TOP 1 * FROM テーブル名 ORDER BY KANRI_NO,EDA_NO))) ORDER BY KANRI_NO,EDA_NO;
(「TOP 1」の部分が、2ページ目だと「TOP 31」、3ページ目だと「TOP 61」と変化)
(実際は検索ボックスの入力値により様々な条件が付随してきます)

上記SQL文により、ソート順は望む通りに下記のように表示されます。
KANRI_NO,EDA_NO
11111, 1
11111, 2
22222, 1
ですが、ユーザから「最新が上にくるようにしてほしい」と要求があり悩んでいます。

上記SQL文をいじって(DESC、不等号の向きなど)試していますが、望むような動きになりません。「TOP句 逆」などで検索しても、いい答えは見つかりませんでした。
どなたかお知恵を拝借願います。

●質問者: kentaro_jpn
●カテゴリ:ウェブ制作
✍キーワード:access DB Max SELECT SQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● freemann
●30ポイント

何をもって最新とするのかがわかりませんが、なんとなくこんな感じにすればよいのではないでしょうか。

SELECT TOP 30 * FROM (SELECT * FROM テーブル名 WHERE (KANRI_NO >= (SELECT MAX(KANRI_NO) FROM

(SELECT TOP 1 * FROM テーブル名 ORDER BY KANRI_NO,EDA_NO))) ORDER BY KANRI_NO,EDA_NO DESC);

一つSELECT文をさらにラップする感じでいいのではないでしょうか。


2 ● Mook
●70ポイント ベストアンサー

最新のものが上ということは全体が逆順になると思うのですが、

例えば2ページを表示する例だと

SELECT TOP 30 * FROM テーブル名 WHERE (KANRI_NO >= (SELECT MIN(KANRI_NO) FROM
(SELECT TOP 60 * FROM テーブル名 ORDER BY KANRI_NO DESC, EDA_NO DESC))) ORDER BY KANRI_NO DESC, EDA_NO DESC;

のようにしてどうでしょうか。

DESC はそれぞれのフィールドに対して修飾が必要です。


VBA を使ってやるのであれば、30, 60 のあたりは変数を使ってできますし、

ADO で SEEK すれば単純にクエリ部は

SELECT * FROM テーブル名 ORDER BY KANRI_NO DESC, EDA_NO DESC

で求めておいて、31から60 までを取得するというコードにすることもできます。

http://msdn.microsoft.com/ja-jp/library/cc948692.aspx

http://jsajax.com/accessWeb/Chapter3/ch3-02.aspx


追伸:

先の質問を見ると PHP からの呼び出しのようですが、現在のコードを

提示いただければ、もう少し具体的な回答ができると思います。

◎質問者からの返答

>DESC はそれぞれのフィールドに対して修飾が必要です。

正にこの知識がなかったために、いろいろ考えたことを試してみても

期待値が得られずにお手上げ状態になっているところでした。

情報不足なわかりにくい質問をしてしまいましたが

的を射た回答をありがとうございました。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ