您可以使用整數表來獲得一系列數字。
說: -
SELECT a.i + b.i * 10 + c.i * 100 FROM integers a, integers b, integers c
與一列稱爲我的表叫整數,10行與值0到9,將讓你在0和999之間的所有數字(你可以很容易地再次加入桌子以獲得更大的數字)。
您可以加入,對你表中查找未使用的數字: -
SELECT *
FROM (SELECT a.i + b.i * 10 + c.i * 100 AS anInt FROM integers a, integers b, integers c) Sub1
LEFT OUTER JOIN someTable
ON Sub1.anInt = someTable.stand
WHERE someTable.stand IS NULL
這是可行的,但會給你所有的號碼在待機範圍的兩端爲好。對於這些,你需要加入對最小和最大
SELECT Sub1.anInt
FROM (SELECT a.i + b.i * 10 + c.i * 100 AS anInt FROM integers a, integers b, integers c) Sub1
INNER JOIN (SELECT MIN(stand) AS MinStand, MAX(stand) AS MaxStand FROM someTable) Sub2
ON Sub1.anInt >= Sub2.MinStand AND Sub1.anInt <= Sub2.MaxStand
LEFT OUTER JOIN someTable
ON Sub1.anInt = someTable.stand
WHERE someTable.stand IS NULL
如果你知道的話,並且可以得到所有'stand'在各自的陣列中,你可以做一些事情像'$ freeStands = array_diff(範圍(1,100),$ idArray));' – Jon
哦......外面的SQL ...我沒有想到它,謝謝,它應該是一個解決方案 –
' $ taken_stands =數組(1,2,3,5,7); echo $ ids = explode(「,」,$ taken_stands); $ sql =「... WHERE STANDS NOT IN($ ids)」;' – 2013-04-02 12:47:32