4

SQLクエリだけで実行できるのか、cidが欠落しているときにphpコードが必要なのかわかりません

手動で処理できない多くの欠損値が存在します

たとえば、ここには と がありませcid=1cid=6。行を挿入したい:

cid=1 tcp_sport='undefined' tcp_dport='undefined'

cid=6 tcp_sport='undefined' tcp_dport='undefined'

プロシージャを作成して行間に挿入する必要があるようです

私が考えた別の解決策は、それぞれの順序で cid と未定義の値を持つテーブルを作成し、これをそのテーブルと結合することでした。この結合には、たとえば ifnull(tcp_sport,'') が必要です

私を助けてくれませんか?

ここに画像の説明を入力

4

3 に答える 3

4

まず、MAX を使用して最大の ID を取得します。

SELECT MAX(cid) as max FROM table

次に、個々の ID が存在するかどうかを確認するための for ループを作成します。

for ($i = 0; $i < $max; $i++) {
    // $query = ... SELECT 1 FROM table WHERE cid = $i ...
    // check if the number of rows for $query is greater than 0
    // if not, INSERT INTO table VALUES ($i, DEFAULT, DEFAULT)
}
于 2012-07-19T16:26:04.397 に答える
3

自動インクリメント ID の全体的な考え方は、これまでに 1 つのものだけを参照する値を持つことです。「行間に挿入」することで、多くの予期しない問題に直面する可能性があります。このテーブルの CID にリンクするいくつかの値を持つ別のテーブルがあるイメージ。そのテーブルに CID=1 のエントリが既にある場合、CID=1 の新しいアイテムを挿入すると、そのサポート レコードに結合されます。したがって、CID=1 の元のアイテムに実際に属しているデータは、おそらく関係のない新しいアイテムに表示されます。

ID 値が不足することはありません (整数の限界に近づいている場合は、bigInt に切り替えてください)。回避できる場合は ID を再利用しないでください。

于 2012-07-19T16:31:40.253 に答える