Datensätze kopieren und vorher bearbeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Datensätze kopieren und vorher bearbeiten

    Hallo zusammen,

    ich habe folgendes Performance Problem.
    Ich muss über 10 Tabellen verschiedene Zeilen kopieren und vorher leicht verändern.

    In einem Testlauf sind es insgesamt 64 Zeilen die bewegt werden müssen. Der Vorgang dauert jedoch fast 10 Sekunden.
    Mein PHP Code sieht so aus:

    Quellcode

    1. $hid = mysql_real_escape_string(intval($_GET[HID]));
    2. $pid = mysql_real_escape_string(intval($_GET[PID]));
    3. $rand = USERFIELD_ID.'_'.rand(1,3000);
    4. $randinkl = $rand.'_inkl';
    5. $randinkltexte = $randinkl.'_texte';
    6. //P_main (1 Datensatz)
    7. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    8. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable31` WHERE ID = $pid";
    9. mysql_query($query,$dbmain);
    10. $query = "SELECT `PNr` FROM `$dbtable31` WHERE `HID` = '$hid' ORDER BY PNr DESC LIMIT 1";
    11. $res = mysql_query($query,$dbmain);
    12. $erg = mysql_fetch_assoc($res);
    13. $PNr = $erg['PNr']+1;
    14. $query = "UPDATE `$rand` SET ID = NULL, PNrkompl = NULL, Freigabe = '0',Sync='1', PNr = $PNr";
    15. mysql_query($query,$dbmain);
    16. $query = "INSERT INTO `$dbtable31` SELECT * FROM `$rand`";
    17. mysql_query($query,$dbmain);
    18. $newPID = mysql_insert_id();
    19. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    20. //P_texte (1 Datensatz)
    21. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    22. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable205` WHERE PID = $pid";
    23. mysql_query($query,$dbmain);
    24. $query = "UPDATE `$rand` SET ID = NULL, Name = CONCAT(Name, '_copy'),Alias = CONCAT(Alias, '-copy'), PID = $newPID";
    25. mysql_query($query,$dbmain);
    26. $query = "INSERT INTO `$dbtable205` SELECT * FROM `$rand`";
    27. mysql_query($query,$dbmain);
    28. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    29. //P_btime (2 Datensätze)
    30. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    31. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable37` WHERE PID = $pid AND Bis > '".date("Y-m-d",time())."'";
    32. mysql_query($query,$dbmain);
    33. $query = "UPDATE `$rand` SET ID = NULL, Sync=1,PID = $newPID";
    34. mysql_query($query,$dbmain);
    35. $query = "INSERT INTO `$dbtable37` SELECT * FROM `$rand`";
    36. mysql_query($query,$dbmain);
    37. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    38. //P_inkl + P_inkl_t (Zusammen: 32 Datensätze)
    39. $query = "SELECT ID FROM `$dbtable32` WHERE PID = $pid";
    40. $res = mysql_query($query,$dbmain);
    41. while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
    42. //P_inkl (1 Datensatz pro durchlauf)
    43. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkl`",$dbmain);
    44. $query = "CREATE TEMPORARY TABLE `$randinkl` SELECT * FROM `$dbtable32` WHERE ID = ".$row['ID'];
    45. mysql_query($query,$dbmain);
    46. $query = "UPDATE `$randinkl` SET ID = NULL,Sync=1, PID = $newPID";
    47. mysql_query($query,$dbmain);
    48. $query = "INSERT INTO `$dbtable32` SELECT * FROM `$randinkl`";
    49. mysql_query($query,$dbmain);
    50. $newinklid = mysql_insert_id();
    51. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkl`",$dbmain);
    52. //P_inkl_t (1 Datensatz pro durchlauf)
    53. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkltexte`",$dbmain);
    54. $query = "CREATE TEMPORARY TABLE `$randinkltexte` SELECT * FROM `$dbtable204` WHERE InklID = ".$row['ID'];
    55. mysql_query($query,$dbmain);
    56. $query = "UPDATE `$randinkltexte` SET ID = NULL, InklID = $newinklid";
    57. mysql_query($query,$dbmain);
    58. $query = "INSERT INTO `$dbtable204` SELECT * FROM `$randinkltexte`";
    59. mysql_query($query,$dbmain);
    60. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkltexte`",$dbmain);
    61. }
    62. //P_kamp (1 Datensatz)
    63. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    64. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable201` WHERE PID = $pid";
    65. mysql_query($query,$dbmain);
    66. $query = "UPDATE `$rand` SET ID = NULL,Sync=1, PID = $newPID";
    67. mysql_query($query,$dbmain);
    68. $query = "INSERT INTO `$dbtable201` SELECT * FROM `$rand`";
    69. mysql_query($query,$dbmain);
    70. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    71. //P_Men (1 Datensatz)
    72. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    73. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable200` WHERE PID = $pid";
    74. mysql_query($query,$dbmain);
    75. $query = "UPDATE `$rand` SET ID = NULL,Sync=1, PID = $newPID";
    76. mysql_query($query,$dbmain);
    77. $query = "INSERT INTO `$dbtable200` SELECT * FROM `$rand`";
    78. mysql_query($query,$dbmain);
    79. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    80. //P_Vtime (1 Datensatz)
    81. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    82. $query = "CREATE TEMPORARY TABLE `$rand` SELECT * FROM `$dbtable36` WHERE PID = $pid AND Bis > '".date("Y-m-d",time())."'";
    83. mysql_query($query,$dbmain);
    84. $query = "UPDATE `$rand` SET ID = NULL, Sync=1,PID = $newPID";
    85. mysql_query($query,$dbmain);
    86. $query = "INSERT INTO `$dbtable36` SELECT * FROM `$rand`";
    87. mysql_query($query,$dbmain);
    88. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$rand`",$dbmain);
    89. //P_z + P_z_p (zusammen: 25 Datensätze)
    90. $query = "SELECT ID FROM `$dbtable34` WHERE PID = $pid";
    91. $res = mysql_query($query,$dbmain);
    92. while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
    93. //P_z (1 pro Durchlauf)
    94. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkl`",$dbmain);
    95. $query = "CREATE TEMPORARY TABLE `$randinkl` SELECT * FROM `$dbtable34` WHERE ID = ".$row['ID'];
    96. mysql_query($query,$dbmain);
    97. $query = "UPDATE `$randinkl` SET ID = NULL,Sync=1, PID = $newPID";
    98. mysql_query($query,$dbmain);
    99. $query = "INSERT INTO `$dbtable34` SELECT * FROM `$randinkl`";
    100. mysql_query($query,$dbmain);
    101. $newinklid = mysql_insert_id();
    102. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkl`",$dbmain);
    103. //P_z_p (4 pro Durchlauf)
    104. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkltexte`",$dbmain);
    105. $query = "CREATE TEMPORARY TABLE `$randinkltexte` SELECT * FROM `$dbtable35` WHERE PZID = ".$row['ID'];
    106. mysql_query($query,$dbmain);
    107. $query = "UPDATE `$randinkltexte` SET ID = NULL, PZID = $newinklid, PID = $newPID";
    108. mysql_query($query,$dbmain);
    109. $query = "INSERT INTO `$dbtable35` SELECT * FROM `$randinkltexte`";
    110. mysql_query($query,$dbmain);
    111. mysql_query("DROP TEMPORARY TABLE IF EXISTS `$randinkltexte`",$dbmain);
    112. }
    Alles anzeigen


    Bei folgenden Bereichen kann die Anzahl der Zeilen stark Variieren:
    P_btime , P_inkl + P_inkl_t , P_Vtime , P_z + P_z_p

    Bei P_inkl_t und bei P_z_p können es durchaus auch mal 10 oder 20 Datensätze pro P_inkl oder P_z Datensatz sein.

    Ich denke mal, dass das was hier so lange dauert das Erstellen der temporären Tabellen ist, jedoch weiß ich nicht wie ich das anders lösen kann. Über Tipps wäre ich sehr dankbar. Sollten noch weitere Infos benötigt werden, kann ich diese gern nachliefern.

    MfG
    boyge