3

如何获取表中乱序的所有记录,以便知道可以重复使用哪些帐号。我有一个从 50100 到 70100 的帐号范围。我需要知道哪些帐号未存储在表中(当前未使用),以便我可以使用。

例如说我在表中有以下数据:

Account Name
------  --------
50100   Test1
50105   Test2
50106   Test4

.. .. .. 我应该看到结果:50101 50102 50103 50104

因为 50101-50104 是可用的帐号,因为当前不在表中。

从http://bytes.com/topic/sql-server/answers/78426-get-all-unused-numbers-range复制

关于 MYSQL 和 PHP。

已编辑

我的范围是 10000000-99999999。

我目前的方法是使用 MySql 查询:'SELECT FLOOR(10000000 + RAND() * 89999999) AS random_number FROM contacts WHERE "random_number" NOT IN (SELECT uid FROM contacts) LIMIT 1';

谢谢。

4

3 回答 3

3

解决方案 1:
生成一个表,其中包含所有可能的帐号。然后运行类似这样的查询:

SELECT id FROM allIDs WHERE id NOT IN (SELECT id FROM accounts)

解决方案2:
将整个id列放入php或java orso中的数组中。然后运行一个 for 循环来检查数字是否在数组中。

$ids = (array with all ids form the table)
for($i=50100;$i<=70100;$i++){
    if(array_search($i, $ids) != -1){
        $availableids[] = $i;
    }
}
于 2012-09-07T13:35:37.167 回答
1

对服务器中的帐户进行排序,并在读取结果时查找 PHP 中的跳转。排序序列中的任何跳转都是“免费使用”的,因为它们是有序的。您可以使用类似的东西进行排序SELECT AccountNumber FROM Accounts SORT ASCENDING;

为了提高效率,将空闲帐号存储在另一个表中,并使用第二个表中的号码,直到没有更多剩余。这样可以避免进行过多的完整读取(如第一段中所示),这可能会很昂贵。在此过程中,您可能希望在删除帐户的代码部分添加一个钩子,以便它们立即包含在第二个表中,从而无需第一步。

于 2012-09-07T13:43:12.357 回答
1

一种方法是创建另一个表 - 填写所有允许的数字,然后编写一个简单的查询来查找新表中不在原始表中的那些。

于 2012-09-07T13:23:18.033 回答