0

10、11、7、5、17、147、555 の特定の順序で次の値が導入されたテーブルがあるとします。

たとえば、テーブルを昇順に並べた場合に 11 がどこにあるかを調べようとすると、インデックスが 4 であることがわかります。

ただし、大量のデータの場合、テーブル全体を取得してphpでソートしたくありません。これはばかげているからです。

私が知りたいのは、mysql がすべての値をクエリせずに、順序付けられたクエリで値のインデックスを返すことができるかどうかです。

ありがとうございました!

更新 #1

私が欲しかったクエリは次のようになります (bluefeet のおかげです):

SELECT rownum FROM (
SELECT col1, @rownum:=@rownum+1 AS rownum
FROM yourtable,
(SELECT @rownum:=0) table1
ORDER BY col1) table2
WHERE col1=11

ここでテストできますhttp://sqlfiddle.com/#!2/a21c8/12

4

2 に答える 2

3

rownumMySQL にはそれ自体はありませんが、次の方法でシミュレートできます。

SELECT col1, @rownum:=@rownum+1 AS rownum
FROM yourtable,
(SELECT @rownum:=0) r
ORDER BY col1

SQL Fiddle with Demoを参照してください

これを使用して、必要なものを決定できrownumberます。

特定のものが必要なrownumber場合は、これをサブクエリでラップできます。

select *
from 
(
  SELECT col1, @rownum:=@rownum+1 AS rownum
  FROM yourtable,
  (SELECT @rownum:=0) r
  ORDER BY col1
) x
where rownum = 6

デモで SQL Fiddle を参照してください

于 2012-09-16T19:55:10.050 に答える
2

MySql にはこのための特別な機能はありませんが (私が知っていることです)、ストアド プロシージャを使用して結果を計算できます。それでも、インデックスを計算するには大量のデータを処理する必要があるため、大規模なデータセットではコストが高くなります。

于 2012-09-16T19:54:23.300 に答える