Mysql

MYSQL計算尚未插入的行的排名

  • December 29, 2019

我有一個類似於此數據的表:

|     id    | username | value |
|-----------|----------|-------|
| 1         | bob      | 46    |
| 483       | alice    | 90    |
| 176       | sue      | 3001  |
| 82        | harry    | 0     |
| 10493     | bill     | 327   |

我有這個查詢,它會根據使用者的排名返回使用者的排名id

SELECT 
   username, 
   value, 
   rank from 
   (
       SELECT 
       tp.username, 
       tp.value,
       tp.id, 
       @curRank := @curRank + 1 AS rank
       FROM table tp, 
       (SELECT @curRank := 0) r
       ORDER BY tp.value DESC
   )
as temp
WHERE id = 483;

所以對於上面的查詢,我會得到 483 的排名返回4 id

假設我想在表中插入以下行:

|   id   | username | value |
|---------------------------|
|    2   |  sally   | 2000  |

有什麼方法可以知道插入後rank該行*會有什麼,*而無需實際插入它?

sally,如果插入,上述查詢的排名將為 2。

我很好奇這是否可能的原因是我試圖將行插入數據庫並且只有這一個事務,而不是必須插入行,然後重新執行排名查詢。

謝謝!

BEGIN;
INSERT the row
calculate the rank; put it into an app variable
ROLLBACK;

ROLLBACK 讓您撤消插入。但與此同時,你已經獲得了排名。

新數據從何而來?你只是手動輸入嗎?

如果數據來自應用程序,您可以使用其 ID 聲明一個變數,然後在插入它之前,進行一個選擇查詢,該查詢將在新數據添加到表之前計算新數據的排名。

如果你一個一個地插入數據,那麼聲明變數是你最好的選擇。您只需要更改變數的值就可以了。

Declare Id int = 2
Declare username varchar(50) = 'sally'
declare value int = 2000

Select 語句將為您提供新數據插入語句的等級。

引用自:https://dba.stackexchange.com/questions/256338