2

ID auto_increment とその命令を格納する 1 つの列を持つテーブルがあります。

$query = "SELECT first_data, second_data, third_data
            FROM table_data
                WHERE condition = 'value_condition'";
$result = mysql_query($query) or die(mysql_error());

$no_of_rows = mysql_num_rows($result);

    if ($no_of_rows > 0) {
        while($row = mysql_fetch_assoc($result)) {
            $valueone = $row['first_data'];
            $valuetwo = $row['second_data'];
            $valuethree = $row['third_data'];

            $queryTwo = "INSERT INTO historial_ventas (reg1, reg2, reg3) 
                        VALUES('$ivalueone','$valuetwo','$valuethree')";
            $resultTwol = mysql_query($queryTwo) or die(mysql_error());
        }
    } else {
        return false;
}

情報は次のように保存されます。

ID(auto_increment)  reg1      reg2      reg3
______________________________________________
1                   value1    value2    value3
2                   value1    value2    value3
3                   value1    value2    value3
4                   value1    value2    value3

しかし、オンラインで購入した場合と同じ ID で保存された記録を while ループで維持したいと考えています。つまり、次のように、製品とその機能を同じ ID で保存して購入します。

ID(auto_increment)  reg1      reg2      reg3
______________________________________________
1                   value1    value2    value3
1                   value1    value2    value3
1                   value1    value2    value3
1                   value1    value2    value3
4

3 に答える 3

5

列が主キーとして定義されていると仮定していIDます。この場合、その全体の目的は、各レコードを識別するための一意のデータを提供することです.同じテーブルに同じ主キーを持つ2つのレコードを持つことは不可能です. 正確に何を達成しようとしていますか?購入 ID を保存する場合は、別の列を作成して明示的に保存する必要があります。自動インクリメント列は探しているものではありません。

于 2012-06-11T03:33:00.883 に答える
2

正規化された方法は、次のようなジョイント テーブルを使用することです。

購入システム

PurchaseIdとの両方ItemIdが自動インクリメントに設定されています。主キーの目的は、各行を一意に識別することです。

更新: お客様

データベースを効果的に設計する方法については、データベースの正規化を参照してください。

ここに画像の説明を入力

于 2012-06-11T03:46:59.220 に答える
0

自動インクリメントを削除し、ID 番号を手動で入力します。また、主キー (つまり、一意) に設定されているかどうかを確認する必要があります。一意性を削除すると、後で重複の問題が発生する可能性があるため、これが目的であることを確認してください。

while ループに入る前にこれを行うには、最大数 ( select max(id) from tablename) を取得し、それを 1 つ増やしてから while ループ内に挿入します。

$query = "SELECT max(id)
            FROM historial_ventas";
$result = mysql_query($query) or die(mysql_error());

//increase you resulting number
$result = $result + 1

    if ($no_of_rows > 0) {
        while($row = mysql_fetch_assoc($result)) {
            $valueone = $row['first_data'];
            $valuetwo = $row['second_data'];
            $valuethree = $row['third_data'];

            $queryTwo = "INSERT INTO historial_ventas (id, reg1, reg2, reg3) 
                        VALUES('$result', '$ivalueone','$valuetwo','$valuethree')";
            $resultTwol = mysql_query($queryTwo) or die(mysql_error());
        }
    } else {
        return false;
}
于 2012-06-11T03:33:32.887 に答える