2013-01-03 25 views
1

我發現this話題對於解決我的問題非常有幫助。但我想找到解決另一個問題的方法。如果數字序列看起來像這樣的01258,那麼缺失的空位是3 4 7.完美的結果,但是如果序列是258,結果是相同的,函數忽略0和1.請幫助我修改該函數,以便檢查空位從0開始?我甚至不知道從哪開始。謝謝。mysql檢查數字序列中的空位

+0

待辦事項你想創建用戶定義的函數來解決tjis問題嗎? –

+0

那麼它將與ID行,我需要序列,因爲我的網站的一切都是用JavaScript完成的。​​我不能用Ajax來檢查哪些數字是免費的,因爲Ajax響應速度有點慢,因爲所有使用dhtml的東西都不能使用提交,所以我需要在一些線後重新排列id。 e刪除的差距毀了我的腳本 – SinSoul

回答

1

輸出缺失範圍列表,如所提供的鏈接,但在指定範圍內(未廣泛測試)。

你需要迭代器來獲取實際值。

CREATE TABLE tempTable AS ... 

DECLARE @StartID INT ... 
DECLARE @EndID INT ... 

SELECT @StartID as gap_starts_at, 
     COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3 
       WHERE t3.id > @StartID AND t3.id < @EndID), @EndID) as gap_ends_at 
FROM tempTable t1 
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = @StartID) 
UNION 
SELECT (t1.id + 1) as gap_starts_at, 
     COALESCE((SELECT MIN(t3.id) -1 FROM tempTable t3 WHERE t3.id > t1.id), 
       @EndID) as gap_ends_at 
FROM #tempTable t1 
WHERE NOT EXISTS (SELECT t2.id FROM tempTable t2 WHERE t2.id = t1.id + 1) 
     AND id < @EndID 

編輯:Here's用一些方法來找到丟失的值的鏈接(我不認爲任何人,雖然在範圍內工作,但有些人可能更容易再擴展其他

+0

謝謝!最後我來解決方案=) – SinSoul