2010-12-07 6 views
0
私はMySQLで問題を持っている

を取得し、私はそのmysqlのソートテーブルと行の位置

 
ID -------- number 
3 -------- 340 
1 -------- 10 
12 -------- 23

ように気にいらない... IDとnubmerのテーブルを持っているそして今、私はIDによってselecetしたいと思い、 ID = 3とし、ソートされたテーブル内のこの行の位置が何であるかを示す方法がありますか?この場合、ID = 3は最初の位置になり、番号の値の最も高い値になります。 ID = 12には2番目の位置があります。あなたがPHPを介した結果セットを返している場合は、次のように

答えて

0

、あなたはarray_search

を使用して値「3」IDフィールドの配列内の位置を決定するか、またはあなたのSQLを変更するためにPHPを使用することができます。

select 
@rownumber:[email protected] as 'rownumber', 
id_field, number_field 
from yourtable, (SELECT @rownumber:=0) rownumber order by number_field DESC 

これは便利な場合は、各行の数

+0

Thnak、これはうまくいきますが、PHPのwhileやforeachのようなサイクルですべての結果を出力したいのですが。 – Martin

+0

あなたが注文したテーブルの行の位置を見つけて、この値だけを印刷したいのですが...私が意味することを知っていれば、データベースで大きな使い方をしたくありません:( – Martin

+0

'rownumber'はあなたに位置 – SW4

0

このクエリを試す提供し、追加の列「ROWNUMBER」を追加します。

SELECT ID,number FROM table_name ORDER BY number DESC; 

ありがとうございます。

1
set @row_number:=0; 
select * from 
    (select ID, @row_number:[email protected]_number+1 from your_table order by number desc) 
    as row_to_return 
where ID=3; 

上記のクエリはあなたが必要なものにIDを置き換えるために変更することができます。
しかし、単純な使い方では、ORDER BY number DESCが最適で最適化されています。

+0

ありがとうございましたajreal、しかしこれでいくつかのreassonのために、どんなエラーも表示されませんeny出力...もちろん私は "your_table"とidの値を置き換えました..おそらく私の欠陥、 – Martin

+0

を生成した@Martin - 上記を2回実行する必要があります。PHPを使用している場合、2つのクエリに分割する必要があります – ajreal

+0

$ ajreal ---本当にありがとう!あなたは絶対ですy right、あなたは私の一日を救った!やっぱり、thnaksともう一度ありがとう! – Martin

関連する問題