2013-01-14 39 views
2

我有一個表如下,它有一個ID和項目名稱,順序和類型。Mysql查詢重新索引項目

+--------+----------------+-----------+---------+ 
    | ID | ITEM   | ORDER | TYPE | 
    +--------+----------------+-----------+---------+ 
    | 1  | Banana  | 2  | Fruit | 
    +--------+----------------+-----------+---------+ 
    | 2  | Apple   | 1  | Fruit | 
    +--------+----------------+-----------+---------+ 
    | 3  | Orange  | 4  | Fruit | 
    +--------+----------------+-----------+---------+ 
    | 4  | Lemon   | 3  | Fruit | 
    +--------+----------------+-----------+---------+ 

如果我刪除說LemonORDER是1,2,4。有沒有一種方法來重新索引其餘項目以獲得以下結果?

+--------+----------------+-----------+---------+ 
    | ID | ITEM   | ORDER | TYPE | 
    +--------+----------------+-----------+---------+ 
    | 1  | Banana  | 2  | Fruit | 
    +--------+----------------+-----------+---------+ 
    | 2  | Apple   | 1  | Fruit | 
    +--------+----------------+-----------+---------+ 
    | 3  | Orange  | 3  | Fruit | 
    +--------+----------------+-----------+---------+ 
+0

是ID的唯一ID?如果是這樣,我強烈建議不要改變它,尤其是對你桌子上的所有物品。 – Boundless

+0

Id是唯一的和自動的。我只需要重新編制訂單 – maxum

+0

好吧,我誤解了它。繼續 :-) – Boundless

回答

3

就在您刪除Lemon行之前 - 請檢查其列號值是什麼ORDER

後執行

UPDATE tbl SET `ORDER` = `ORDER` - 1 WHERE `ORDER` > value_lemon_had 
3

沒有辦法完全自動地做到這一點,但它會很簡單。假設ORDER不是唯一的,它更容易,但如果是這樣,你將不得不首先檢索「檸檬」的ORDER。然後,就這樣做:

UPDATE Fruit SET ORDER = ORDER - 1 WHERE ORDER > ? 

哪裏?是檸檬的ORDER

假設ORDER不是唯一的,那麼你可以事先做這個查詢,但你會加入Fruit選擇檸檬的命令來取代?