Probleme beim Datenbankupdate

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Probleme beim Datenbankupdate

    Hallo zusammen,
    ich habe eine Auktionssoftware laufen und muss ab und zu die Counter der Kategorien aktuallisieren. Als ich nur einige Artikel in der Datenbank hatte ca. 2000 funktionierte das Scipt einwandfrei. Jetzt sind aber ca 20.0000 Artikel in der Datenbank und das Script wird nicht bis zum Schluss ausgeführt. Hat jemand Rat ?

    <?php

    require('../includes/messages.inc.php');
    require('../includes/config.inc.php');

    //--Authentication check
    if(! $HTTP_COOKIE_VARS["authenticated"])
    {
    Header("Location: login.php?loginfail=0");
    }
    ?>

    <html>
    <head>
    <title></title>
    </head>
    <?
    require('../includes/styles.inc.php');
    ?>

    <body>


    <?php require("./header.php"); ?>

    <TABLE WIDTH=100% BORDER=0 CELLPADDING=0 CELLSPACING=0 BGCOLOR="#FFFFFF">
    <TR>
    <TD>

    <?php
    // Alle Counter in der Tabelle: Counters auf 0 setzen.
    $sql_01 = mysql_query ("UPDATE counters SET auctions = '0'");

    // Auktionscounter neu setzen.
    $sql_04 = mysql_query ("SELECT Count(*) as total FROM auctions WHERE closed = '0'");
    $auctions = mysql_fetch_array($sql_04);
    $num_auctions = $auctions[total];
    if ($sql_04)
    $sql_05 = mysql_query ("UPDATE counters SET auctions = $num_auctions");

    // Alle Counter & Sub_counter in der Tabelle: Categories auf 0 setzen.
    $sql_06 = mysql_query ("UPDATE categories SET sub_counter = '0', counter = '0'");

    // Counter & Sub_counter wieder herstellen.
    $sql_07 = mysql_query ("SELECT * FROM auctions, categories WHERE auctions.category = categories.cat_id AND auctions.closed = '0'");
    if ($sql_07) // Datensatz gefunden ?
    {
    $posten = mysql_num_rows($sql_07); // Anzahl der Posten ermitteln
    $x = 0; // Laufvariable auf 0 setzen
    while ($x < $posten) // Schleife bis Ende Datensatz
    {
    // je Auktion den Category counter hochsetzen
    $ct = mysql_result($sql_07,$x,"auctions.category");
    $row = mysql_fetch_array(mysql_query("SELECT * FROM categories WHERE cat_id=$ct"));
    $counter = $row[counter]+1;
    $subcoun = $row[sub_counter]+1;
    $parent_id = $row[parent_id];
    mysql_query("UPDATE categories SET counter=$counter, sub_counter=$subcoun WHERE cat_id=$ct");

    // update recursive categories
    while ($parent_id!=0)
    {
    // update this parent's subcounter
    $rw = mysql_fetch_array(mysql_query("SELECT * FROM categories WHERE cat_id=$parent_id"));
    $subcoun = $rw[sub_counter]+1;
    mysql_query("UPDATE categories SET sub_counter=$subcoun WHERE cat_id=$parent_id");
    // get next parent
    $parent_id = intval($rw[parent_id]);
    }

    $x++; // Laufvariable +1 setzen
    }
    echo "</table>";
    }


    $query0 = mysql_query ("select * from categories");
    $posten = mysql_num_rows($query0);

    function kategoriebaum($who,$zeile)
    {
    $query1 = mysql_query ("select * from categories where parent_id = $who;");
    while ($var_cat = mysql_fetch_array($query1))
    {
    $cat_name = $var_cat[cat_name];
    $sub_counter = $var_cat[sub_counter];
    $cat_counter = $var_cat[counter];
    $cat_number = $var_cat[cat_id];
    $par_number = $var_cat[parent_id];
    $who1 = $var_cat[cat_id];

    echo "<tr class=\"navigation\">";
    echo $zeile."<td align=\"right\">".$cat_number."</td>";
    echo $zeile."<td align=\"right\">".$par_number."</td>";
    echo $zeile."<td align=\"right\">".$cat_name."</td>";
    echo $zeile."<td align=\"right\">".$sub_counter."</td>";
    echo $zeile."<td align=\"right\">".$cat_counter."</td>";
    echo "</tr>";
    kategoriebaum($var_cat[cat_id],$zeile);
    }
    }

    ?>

    <table width="100%" border="0">
    <tr>
    <td style="text-align:center; padding:10px;">
    <?php echo $nav_font."Struktur der Tabelle \"categories\" mit ".$posten." Kategorien nach dem Aktualisieren der Counter"; ?>
    </td>
    </tr>
    </table>

    <table style="width:100%; border:solid 1px #0055BB; background-color:#FFFFFF;">
    <tr>
    <td style="width:30%;">
    </td>
    <td style="text-align:center;">
    <table style="width:600px;" border="0">
    <tr bgcolor="#EEEEEE" class="navigation">
    <td style="width:75px; text-align:center; padding:0px 10px;">cat_id</td>
    <td style="width:75px; text-align:center; padding:0px 10px;">parent_id</td>
    <td style="width:300px; text-align:center; padding:0px 10px;">cat_name</td>
    <td style="width:75px; text-align:center; padding:0px 10px;">sub_counter</td>
    <td style="width:75px; text-align:center; padding:0px 10px;">counter</td>
    </tr>
    <?php echo kategoriebaum(0,""); ?>
    <tr>
    <td style="text-align:center; padding:10px;" colspan="5">
    <?php echo $std_font.$num_users." Benutzer und ".$num_auctions." Auktionen</span>"; ?>
    </td>
    </tr>
    <tr>
    <td align="center" colspan="5">
    <a class="Links" href="./admin.php">Admin-Hauptmenü</a>
    </td>
    </tr>
    </table>
    <br></td>
    <td style="width:30%;">
    </td>
    </tr>
    </table>
    </td></tr></table>

    <?php require("./footer.php"); ?>

    </body>
    </html>

    Gruß
    Emtec

  • #2
    kann es sein dass es einfach zu lange dauert, weil es so super viele queries schickt?
    Verstehe eigentlich auch nicht warum Du counter händisch aktualisieren musst, aber naja.
    Beantworte nie Threads mit mehr als 15 followups...
    Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

    Kommentar


    • #3
      Muss ich von Hand ändern weil ich Daten per SQL Befehl einliefere.

      Kann schon sein das es zu lange dauert. Gibt es denn wohl eine andere Möglichkeit dies zu realisieren ?

      mfg
      emtec

      Kommentar


      • #4
        Hi,

        ich habe gerade gewünschtes System für Kunde entwickelt.
        User ohne SQL-Kenntnisse können dialgbasiert komplex Abfrage vornehmen. Das System aktualisiert die DB Structur selbstständig.
        So ne Art JavaScript basiertes erweitertes MyPHPAdmin...

        Aus dem Listing entnehme ich, dass wohl mehr Hobby-Coder sind.
        Deshalb fällt es Ihnen schwer gewünschte Lösung umzusetzen.

        Sie sollten das Skript erstmal ordentlich überarbeiten
        => sog. objektorientierte Programmierung.
        dann fällt es Ihnen leicht Ihre Implementierungswünsche vorzunehmen.

        cu

        Blaster
        Yuppi, endlich Elite ...

        Kommentar

        Lädt...
        X