2016-03-08 67 views
2

我有一個表,其中有一列名爲uid,它使用Autoincrement,並使用1,2,3等更新。現在我有cron作業,刪除超過2天的行。所以現在我的UID列是2345 n..I想將其重置爲1到n again.I嘗試下面的代碼用1更新整列到n

UPDATE `tv` SET `uid` = '' 

我是通過通過PHP腳本中的所有行和更新的UID思維迴路,有沒有其他的替代方案使用單個SQL命令?

+0

@ lad2025:您好,請刪除重複的,這是不解決我的問題 – Vishnu

回答

2

你可以嘗試這樣的事情:

UPDATE `tv` t 
set t.`uid` = (SELECT count(*) 
       from `tv` s 
       WHERE t.`uid` >= s.`uid`) 

這算多少的UID是有是小於或等於則一個更新,所以當第一UID,可以說2345正在更新,只有1 uid與小於/等於他因此將獲得價值1等等...

編輯:嘗試這 -

UPDATE `tv` t 
INNER JOIN(SELECT s.`uid`,count(*) as cnt 
      from `tv` s 
      INNER JOIN `tv` ss 
      ON(s.`uid` >= ss.`uid`) 
      GROUP BY s.`uid) tt 
ON(t.`uid`=tt.`uid`) 
SET t.`uid` = tt.cnt 
+0

我得到這個錯誤 - 你不能指定目標表「T」的更新在FROM子句 – Vishnu

+0

你有一個錯誤的SQL語法;請檢查與您的MySQL服務器版本相對應的手冊,以找到在uid' = s.'uid'附近使用的正確語法)SET t.'uid' = tt.cnt'at line 6 – Vishnu

+0

Argh,a typo .. now: P @Vishnu – sagi

1

爲什麼不通過降低UID:

update tv set uid = uid -1 
+0

你的意思是什麼,它會減少2345到2344?當只有400行時,我只需要1到400個uid – Vishnu