2011-06-30 11 views
0

これを行う方法はありますか:ORDER BYが1降順の場合はフィールドを更新しますか?

ORDER BYの場所に従ってフィールド 'ランク'を更新したいとします。例えば

:(擬似)

If id order by place = 1 then update rank field to place were id=get id 


rank place id 

    1  1 5 PC 
    2  2 8 MAC 

これが可能ですか?

+0

質問をしてください。 – Eineki

+0

ok。変更ボタンをクリックすると、ORDER BY関数によって与えられた場所に従って、そのテーブルのフィールドランクを更新します。 id = 9 orderを "wins"と言います - テーブルに#10を置きます。同じテーブル内のそのIDの 'ランク'フィールドに#10の値を追加したいと思っています....はい? – fabio

答えて

0

一部のRDBMSには、これに使用できるクエリにROWNUM疑似列があります。 使用しているデータベースを指定していません。たとえば、Oracleにはこれがあります。

+0

oh..i phpmyadmin mysql ..を使っていますか? – fabio

+0

私はmysqlの大ファンではありませんが、qick google検索でこの単純なrownumエミュレーションのトリックができました:http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/プレイヤーpからの@rownum:= @ rownum + 1 'rank'、p。*、(SELECT @rownum:= 0)r order by score desc – Szocske

3

これは何ですか?

UPDATE tbl_name 
SET rank = 1 
WHERE id = (
    SELECT id 
    WHERE condition 
    ORDER BY place DESC 
    LIMIT 1 
) 

それともあなたのコメント(私はMySQLのhttp://dev.mysql.com/doc/refman/5.0/en/update.html思う)から:あなたは常にこれらはあなたが同様に更新したいレコードですかどうかを確認するように選択を行うことができます

UPDATE tbl_name 
SET rank = 10 
WHERE id = 9 
ORDER BY wins DESC 
LIMIT 1 

SELECT * 
FROM tbl_name 
WHERE id = (
    SELECT id 
    WHERE condition 
    ORDER BY place DESC 
    LIMIT 1 
) 

または

SELECT * 
FROM tbl_name 
WHERE id = 9 
ORDER BY wins DESC 
LIMIT 1 
+0

制限1は1位になったことを示しますか? – fabio

+0

ORDER BYはDESC LIMIT 1を獲得し、最後の勝利は1レコードしか返しません –

関連する問題