• ベストアンサー

複雑なSELECT

SELECT * FROM hoge WHERE hoge LIKE '%$okweb%' ORDER BY day DESC; と、ほしい情報が入っているレコードを取得した場合、セレクトした一番最後のレコードの次を取得するにはどうしたらいいのでしょうか?又は一番初めの一つ前のレコードを取得するにはどうしたらいいのでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

#1回答者です。 MySQLはバージョンアップが盛んに行われているので、 質問する場合は、バージョンを明記しましょう。 具体的なSQL例を回答してもらっても、バージョンの違いで実行できないということも珍しくありません。 以下のSQL例は、副問い合わせ(サブクエリ)を使用しているため、バージョン4.1以降でないと実行できないかも知れません。 ●前の日付を得る select max(hoge_date) from hoge_table where `day`<(select min(`day`) from hoge_table where hoge_date like '%2006/3/20%'); ●次の日付を得る select min(hoge_date) from hoge_table where `day`>(select max(`day`) from hoge_table where hoge_date like '%2006/3/20%');

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

テンポラリをつかってこんな感じでいけませんか? ただしdayに連続性がないとだめですけど。 hogeはdate型にしない理由はなにかあるのでしょうか? CREATE TEMPORARY TABLE `MIN-1` SELECT MIN(`day`)-1 AS `LESSMIN` FROM `hogetable` WHERE `hoge` LIKE '%2005/1/4%' ; CREATE TEMPORARY TABLE `MAX+1` SELECT MAX(`day`)+1 AS `MOREMAX` FROM `hogetable` WHERE `hoge` LIKE '%2005/1/4%' ; SELECT `hogetable`.* FROM `hogetable`,`MIN-1`,`MAX+1` WHERE `day` BETWEEN `LESSMIN` AND `MOREMAX` ORDER BY `day`;

すると、全ての回答が全文表示されます。
回答No.1

>「一番最後のレコードの次」 >「一番初めの一つ前のレコード」 どういう順序での、「次」や「前」なのでしょうか? (1)列dayでソートしているので、前後の日付という意味? (2)列hogeでLIKE検索しているので、その検索範囲外の近い値という意味? (3)表hogeにユニークなキーがあり、検索対象になったレコードのキー値の前後のレコードということ?

itmedia_search
質問者

補足

すいませんでした。 意味は 1 です。 日ごとにレコードがあり、初めのレコードほど古く、最後尾がもっとも最新な情報となります。ややこしくて申し訳ないのですが、dayには日付が格納されているのではなく、auto_incrementでつけた数字が入っています。日付は hoge に 2005/3/20 な感じで入っています。つまり、 2005/1/4 にちの日に登録されたレコードをすべて取得した後、その一つ前1レコードと一つ後1レコードのみを取得したいと思っています。つまり、1/4以降と以前に登録された日を割り出すため、このようにややこしくなってしまいました。 よろしくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A