0

クエリが完了するまでに時間がかかるという事実を除いて、次のコードがあります。どうすれば速くできますか?2 レコードの場合、約 1 ~ 2 分かかるようです。

$query2 = "SELECT COUNT(*) FROM preordertablet1"; 
$result = mysql_query($query2) or die(mysql_error()); 
$count = mysql_fetch_row($result); 
//$result=mysql_query($query) or die ("Gegevens niet kunnen ophalen uit preorder tabel. Foutmelding: ".mysql_error());
$c=0;
while ($c<=$count) 
    {
    $query="SELECT * FROM preordertablet1 WHERE ID = '$c'";
    $result=mysql_query($query) or die ("gegevens niet geladen uit de preordertabel, fout: ".mysql_error());
    while ($row=mysql_fetch_array($result)) 
        {
        $ID1=$ID1+1;
        $c++;
        $naam=$row['naam'];
        $Postcodehuisnummer=$row['Postcodehuisnummer'];
        $datum=$row['datum'];
        $dagen=$row['dagen'];
        $productid=$row['productid'];
        $subid=$row['subid'];
        //$ID2=$ID1;
        //gegevens in database plaatsen
        $result=mysql_query("INSERT INTO huur (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid) VALUES ('$ID1', '$ID2', '1', '$naam', '$postcodehuisnummer', '$huurdatum', '$aantaldagen', '$productid', '$subid')") or die ("Fout: ".mysql_error());
        echo 'preorder fiets toegevoegd met ID2: ', $ID2,'<br>';
        //$ID1=$ID1+1;
        }
    }
4

2 に答える 2

0

$result変数は挿入操作に再利用されています。次に、$result値はwhileループでテストされます。

 $result_insert = mysql_query("INSERT INTO huur etc etc")
于 2013-03-16T12:09:23.200 に答える
0

これが実行中のすべてのコードであると仮定すると、行数に関係なくすべての行を解析する必要があるため、最初のクエリはほとんど役に立ちません。したがって、最初の 3 行をまとめてスキップできます。

次に、 $c 変数があります。ただし、これを解析して破棄できる行数を知る必要がある場合を除きます。

次に、最初のループ内にクエリがあります。「WHERE ID = '$c'」の部分が原因で、挿入された行が 1 つしか取得されない可能性があります。ID 列が auto_increment 主キーの場合、最初に挿入された行の値は少なくとも 1 になりますが、最初に行うチェックは ID = 0 であり、何も返されません。したがって、2 つの行を持つテーブルの最後の反復は ID 1 になりますが、その ID を持つ行があるという保証はありませんが、あなたの場合は 1 つあり、これがあなたが見ている行であると推測していますあなたの結果。

ID1 や ID2 などの列についてもう少し情報がなければ、2 番目の while ループの修正を提案するつもりはありません。テーブル定義 (テーブル構造の作成) を投稿して、もう少し詳しく説明していただけないでしょうか?

他の人が言ったように、mysql_ 関数を使用しないでください。これらは非推奨であるため、いつでも PHP から消える可能性があります。

もちろん、テーブルのレイアウトや何を達成しようとしているのかを投稿していないため、これはすべてテーブルについての推測に基づいています。

ここに簡単なコード スニペットがあります。完全ではありませんが、PDO についてはこちらをお読みください。

$pdo = new PDO(<insert your connection information here>);
$selectStmt = $pdo->query('SELECT * FROM preordertablet1');
$insertStmt = $pdo->prepare("INSERT INTO huur
    (ID, ID2, status, naam, Postcodehuisnummer, datum, dagen, productid, subid)
  VALUES
    (:ID1, :ID2, '1', :naam, :postcode, :datum, :dagen, :productid, :subid)");
$ID1 = 0; // Or whatever starting value you're working from.

while ($row = $selectStmt->fetch(PDO::FETCH_ASSOC)) {
    $ID1++;
    $values = array("ID1" => $ID1, "ID2" => NULL, "naam" => $row['naam'], etc...
    $insertStmt->execute($values);
}
于 2013-03-16T15:22:28.607 に答える