1

以下のように配置された果物という名前のテーブルがあると想像してください。

  |   id    |    fruit     |   colour    |
  |--------------------------------------|
1 |  ptiru  |    Grape     |  Green/Red  |
2 |  wlk3b  |    Banana    |   Yellow    |
3 |  i9nuc  |  Strawberry  |     Red     |

ID列に注目しましょう。毎回 +1 ずつ増加する、自動インクリメントされた整数ではないことがわかります。代わりに、5 つの数字/文字のランダムな組み合わせです。

2 番目のレコード (バナナ) を選択した場合、前のレコード (ブドウ) と次のレコード (イチゴ) を選択するにはどうすればよいですか?

答えが待ちきれません ;) ありがとうございます!

4

4 に答える 4

1

($i = 0)ループ内でインクリメントされるループの前に変数を 0 に設定します($i++)。値をインクリメントした後mysql_data_seek($result,$i)、次のレコードまたはmysql_data_seek($result,($i - 2))前のレコードを取得するために使用します。

于 2012-05-25T20:15:49.557 に答える
0

SELECT @rownum := @rownum AS position, f.* from fruits f, (select @rownum:=0 r ) r

このクエリは、次のような結果セットを提供します。

+----------+-------+------------+
| position | id    | fruit      |
+----------+-------+------------+
|        1 | ptiru | Grape      |
|        2 | wlk3b | Banana     |
|        3 | i9nuc | Strawberry |
+----------+-------+------------+

次に、これらをコードの配列にロードし、インデックスを使用して、必要に応じて次/前の果物を見つけることができます。

于 2012-05-25T20:39:51.407 に答える
0

順序が同じである必要はないため、少し読んだ後は、それを行うことができなくなります。

インデックスまたは PK を使用してテーブルを作成すると、行に順序があり、どの行にあるかどうかを指定しなかったため、おそらく 1 つもありません。

インデックスなしでテーブルを作成して挿入を開始すると、最後の挿入が最後に表示されますが、変更を加えると行の位置が変わります。このリンクをご覧ください

したがって、「バナナ」の前にあるものを知りたい場合は、インデックスを追加すると並べ替えられます。または、ランダムに並べ替えて値を取得する前に、最良の方法はストアプロシージャまたはカーソルと関数を使用することです。変数。

よろしく

于 2012-05-27T15:54:24.193 に答える
0

このようなものを見たことがないので、ここで手足を出しますが、「id」列は真のIDではないと思います...おそらく一意のキーですが、実際にはIDではありません。自動インクリメントである列を追加して、そこから....

于 2012-05-25T20:11:47.237 に答える