質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

2回答

688閲覧

Mysqlで開始位置の条件を設定する

miyu_

総合スコア70

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

0クリップ

投稿2021/12/02 06:25

編集2021/12/02 07:41

カーソルのように任意の値から任意の数だけ値を取得するsql文を書きたいです。
具体的には

id1259...50
nameapplebananaorangelemon...peech
rate3135...2

の場合、指定のidからlimit5個のように取り出したいです。

想定しているクエリは、実際にはありませんが以下のようなイメージです。

sql

1select name from fruits order by rate asc, id asc limit 5 <offset start_id=5>;

offset等は条件が書けないと、idバラバラになり、where id>=5のようにできません。
今回はorder by rate asc, id ascを使用しましたが、想定としてはcase等複雑になる見込みです。
教えていただけますと幸いです。
よろしくお願い致します。

(補足)
MySQLのバージョンは5.7です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takanaweb5

2021/12/02 07:05

MySQLのバージョンはいずれでしょうか?
yambejp

2021/12/02 07:13 編集

一般にDBのデータは縦方向に記載します。 (ちょっと紛らわしいです) それとサンプルがrateでソートしているにしては順番がおかしいです 具体的なサンプルデータを元に想定する結果を例示ください
takanaweb5

2021/12/08 05:19

mysqlでも8.0以降なら使えます。
miyu_

2021/12/08 05:21

それは知りませんでした。 追記いただきありがとうございます。
guest

回答2

0

ベストアンサー

SQL

1CREATE TABLE fruits(id int, name varchar(6), rate int); 2INSERT INTO fruits(id, name, rate) 3VALUES 4 (1, 'apple', 3), 5 (2, 'banana', 1), 6 (5, 'orange', 3), 7 (9, 'lemon', 5), 8 (50, 'peech', 2);

SQL

1SELECT name 2FROM ( 3 SELECT T1.* 4 , @rank := CASE WHEN @rank > 0 OR id = 5 5 THEN @rank + 1 6 ELSE 0 7 END AS rank 8 FROM (SELECT * FROM fruits ORDER BY rate, id) AS T1 9 , (SELECT @rank:=0) AS X -- 変数の初期化 10 ) AS T2 11WHERE rank BETWEEN 1 AND 5; 12

参考までにサブクエリ部分の実行結果

idnameraterank
2banana10
50peech20
1apple30
5orange31
9lemon52

投稿2021/12/02 11:50

編集2021/12/02 11:53
takanaweb5

総合スコア359

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyu_

2021/12/07 02:25

こんな書き方もあるのかと勉強になりました。 ご丁寧な回答を頂きありがとうございました。
guest

0

where id > 5でしょうか?

SQL

1select name 2from fruits 3where id > 5 4order by rate asc, id asc 5limit 5;

投稿2021/12/02 07:30

skys215

総合スコア910

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

miyu_

2021/12/02 07:40

こちらだとidが5以下のものが出なくなってしまうかと思います。 今回は5を例示しましたが、任意のものでも動作することを想定しています。
yambejp

2021/12/02 08:47

TO:miyu_さん きちんとしたサンプルがないと回答がぶれるので、再度命題を調整してください
skys215

2021/12/02 10:01

ならlimit 3, 5; でしょうか? それとも、name=orangeから6つ欲しいのか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問