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
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
Kommentar