0

タイトルでもどう説明したらいいのかわからないけど、これが欲しい。

最初に私は5つのレコードを持っています

id | name  |
------------
1  | ringo |
------------
2  | nashi |
------------
3  | momo  |
------------
4  | manga |
------------
5  | tokyo |

ここで、クエリを開始する行に乱数を生成します。たとえば、乱数が4であるため、行4と5を取得します。しかし、私の問題は、クエリごとに4つのレコードが必要なことです。つまり、最初のレコードに戻って最初の2行を取得するということです。

クエリ結果に必要なレコード数が不足している場合に、最初の行に戻ることができる方法はありますか?

これは、 MySQLのn番目のレコードから選択するなどの関連する質問であり、これまでに行ったことを示しています。

4

2 に答える 2

3

テーブルを最初にピボットより大きいレコードでソートしid、次に でソートすると、最初の 4 つのレコードまでの結果セットidのみが必要になります。LIMIT

SELECT * FROM my_table ORDER BY id >= 4 DESC, id LIMIT 4

sqlfiddleで参照してください。

于 2012-10-05T08:56:40.983 に答える
1

これが私がすることです。

SELECT * FROM `your_table`
WHERE `id` >= 3 /* 3 is some random number */
UNION
SELECT * FROM `your_table`
WHERE `id` < 5
LIMIT 4

編集:彼のコメントでのeggyalの質問は検討する価値のあるものです。そのオプションを考慮した私の提案は以下のとおりです。

SELECT * FROM `your_table`
WHERE `id` >= 3 /* 3 is some random number */
UNION
SELECT * FROM (
    SELECT * FROM `your_table` LIMIT 4
) a
LIMIT 4
于 2012-10-05T08:13:52.410 に答える