MySQLで、該当のレコードの

1件前の情報と、1件後の情報を
同時に取得できるようなSQL文は可能でしょうか?

回答の条件
  • 1人2回まで
  • 登録:2008/04/18 16:16:53
  • 終了:2008/04/25 16:21:47

回答(4件)

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332008/04/18 16:31:23

ポイント23pt

結論から書くと、できません。


一般的にSQL系DBでは、レコードの並び順は不定です。

たとえば、新しいレコードをinsertした場合、それが最終レコードに追加されるか、レコードの途中に挿入されるかは、RDBMSによってまちまちです。MySQLでは、deleteでレコード削除が行われており、DB再構築が行われていないと、途中に挿入されるようです。

したがって、あるカラムに対する並び順を指定してやらない限り、「1件前」「1件後」という順序指定はできません。

id:hopefully

並び順ってどういう順序にすればいいんですか?

2008/04/22 10:31:03
id:guja No.2

guja回答回数40ベストアンサー獲得回数82008/04/18 17:00:33

ポイント23pt

例えば値が1ずつ増えるユニークなid列(主キー)がある場合であれば、可能といえば可能です。

例えば、tableにid,nameというフィールドがあって、

1 a

2 b

3 c

というようなデータ形式であれば、次のようなSQLで取得できます。


SELECT * FROM table AS target_table

LEFT JOIN table AS before_table ON before_table.id = target_table.id - 1

LEFT JOIN table AS after_table ON after_table.id = target_table.id + 1

WHERE target_table.id = 2;


ただしこの場合は1,2,3,と必ず1ずつ値が増えるレコードが存在している、という前提ですので、かなり制限は大きいです。

id:hopefully

試してみましたが、結果は0件です。

うーーん、なんででしょうかね・・・

2008/04/22 10:30:40
id:b-wind No.3

b-wind回答回数3344ベストアンサー獲得回数4402008/04/18 22:26:59

ポイント22pt

無理やりやろうとすれば、出来なくも無い。

元テーブルが、以下のとおりだとすると

CREATE TABLE data (
  data_id int primary key,
  data_text text
  sort_column int not null
);

で、目標のデータが、data_id = 10 だとする。


REATE TEMPORARY TABLE sort_data (
  id int primary key AUTO_INCREMENT,
  data_id int NOT NULL,
  data_text text
) SELECT NULL,data_id,data_text FROM data ORDER BY sort_columns;

としておいてから、

SELECT data_id, data_text
  FROM sort_data
  WHERE id BETWEEN
       ( SELECT id - 1 FROM sort_data a WHERE data_id = 10 )
    AND
       ( SELECT id + 1 FROM sort_data a WHERE data_id = 10 )

とか。


ただ、見てのとおりわかりやすくもないし、効率もよくない。

アクセスするアプリケーション側で処理するほうが楽。

id:hopefully

了解です。やはり、foreachなどで

処理するのが無難ですかね。

2008/04/22 10:30:15
id:ken33jp No.4

ken33jp回答回数928ベストアンサー獲得回数132008/04/18 21:24:27

ポイント22pt

http://q.hatena.ne.jp/pahoo/

できないといってるので、できないと思いますよ。


http://q.hatena.ne.jp/1192783057

こんなのでよかったら、実現可能です。

コメントはまだありません

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

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

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

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