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 クエリを使用しています。

ありがとう。

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

1 つの方法は、別のテーブルを作成することです。許容されるすべての数値を入力してから、元のテーブルにない新しいテーブル内のテーブルを検索する簡単なクエリを記述します。

于 2012-09-07T13:23:18.033 に答える
1

サーバーでアカウントを並べ替え、結果を読みながら PHP のジャンプを見つけます。並べ替えられたシーケンス内のジャンプは、順序付けされているため、「自由に使用できます」。のようなものでソートできますSELECT AccountNumber FROM Accounts SORT ASCENDING;

効率を改善するには、無料のアカウント番号を別のテーブルに保存し、この 2 番目のテーブルの番号を残りがなくなるまで使用します。これにより、コストがかかる可能性がある (最初の段落のように) 過度に多くの完全な読み取りを行うことを回避できます。作業中に、アカウントを削除するコードの部分にフックを追加して、アカウントがすぐにこの 2 番目のテーブルに含まれるようにし、最初のステップを不要にすることができます。

于 2012-09-07T13:43:12.357 に答える