Så påberåber jeg mig retten til at være Thomas Eje.
Der er ingen mulighed for rent faktisk at se, hvad du gør? :) Det er i hvert fald betydeligt lettere og hurtigere.
Men: 1) Du åbner vel kun databaseforbindelsen én gang og ikke flere gange i din kode? 2) Du bør ikke bruge "SELECT *" hvis du kan undgå det - det er bedre at skrive "SELECT felt1,felt2,felt3" - dvs. definere de data, du skal bruge. 3) Undgå overdrevent brug af Sessions og løkker og overvej i øvrigt om flere SQL-sætninger kan slåes sammen til en.
Men nu er det jo altså noget lettere at se, hvad du gør, og så kommentere det.
Helle for at være Finn, Amin Jensen er lige et par numre for stor til mig, så håber det er ok med dig dkfire, at du er Amin.
Og ellers kan database optimering være vejen frem. Hvor stor er tabellen som data trækkes fra ? Er det en belastet database server. Og indeksering som w13 er inde på.
Der er mange steder at starte. Laver du f.eks. select inde i resultatet fra en tidligere select.
- og samler du data til udskrift, bør du samle data i en buffer, som skrives ud ét sted. Det kan enten være en streng, du konkatenerer - eller et array, som imploderes.
Som de andre også skriver, er det ikke til at sige meget mere om, hvor du skal tage fat, uden at kende konteksten =)
Brug den og lav nogle "laptimes" i løbet af scriptet, så du kan se hvad den bruger tid på - Det er sandsyligvis en langsom query - EXPLAIN din SELECT og få sat nogle indexer på ;)
Jeg har rodet lidt med det, men har ikke kunne hitte ud af det.. I får lige hele koden :)
<?php include("top.php");
echo "<h3>Statistik</h3>";
$res = mysql_query("select * from brugere order by oprettet desc limit 0,10") or die(mysql_error()); echo " <table> <tr> <td valign='top' width='230'> <b>Nyeste 10 brugere:</b><br> "; while($row = mysql_fetch_array($res)) { $email = $row[email]; $bruger_id = $row[id]; $active = $row[active]; if($active==1) { $img = "<img src='../graphics/status_godkendt.gif' alt='Aktiveret'> "; } else{$img = "<img src='../graphics/status_afvist.gif' alt='Ikke aktiveret'> ";} $alder = age($row[foedselsdag]); echo "$img <a href='brugere.php?id=$bruger_id&email=&soeg=S%F8g+i+databasen'>$email</a> ($alder år)<br>"; } echo" </td> <td valign='top' width='230'> <b>Online brugere:</b><br> "; $res_online = mysql_query("select distinct bruger_id from online where bruger_id!='0'"); while($row = mysql_fetch_array($res_online)) { $id = $row[bruger_id]; $res2 = mysql_query("select * from brugere where id='$id'") or die(mysql_error()); $row2 = mysql_fetch_array($res2); $email = $row2[email]; $bruger_id = $row2[id]; $alder = age($row2[foedselsdag]); echo "<a href='brugere.php?id=$bruger_id&email=&soeg=S%F8g+i+databasen'>$email</a> ($alder år)<br>"; } echo" </td> <td valign='top' width='230'> <b>Top10 brugere:</b><br> "; $res_online = mysql_query("SELECT bruger_id, SUM(point) AS point_sum FROM point_log group by bruger_id order by SUM(point) desc limit 0,10"); while($row = mysql_fetch_array($res_online)) { $id = $row[bruger_id]; $point = $row[point_sum]; $res2 = mysql_query("select * from brugere where id='$id'") or die(mysql_error()); $row2 = mysql_fetch_array($res2); $email = $row2[email]; $bruger_id = $row2[id]; $alder = age($row2[foedselsdag]); echo "<a href='brugere.php?id=$bruger_id&email=&soeg=S%F8g+i+databasen'>$email</a> - $point<br>"; } echo" </td> <td valign='top' width='230'> <b>Dagens Top10:</b><br> "; $res_online = mysql_query("SELECT bruger_id, SUM(point) AS point_sum FROM point_log where DATE(time)=CURDATE() group by bruger_id order by SUM(point) desc limit 0,10"); while($row = mysql_fetch_array($res_online)) { $id = $row[bruger_id]; $point = $row[point_sum]; $res2 = mysql_query("select * from brugere where id='$id'") or die(mysql_error()); $row2 = mysql_fetch_array($res2); $email = $row2[email]; $bruger_id = $row2[id]; $alder = age($row2[foedselsdag]); echo "<a href='brugere.php?id=$bruger_id&email=&soeg=S%F8g+i+databasen'>$email</a> - $point<br>"; } echo" </td> </tr> </table> ";
$res = mysql_query("select * from brugere") or die(mysql_error()); $count_brugere = mysql_num_rows($res); $res2 = mysql_query("select * from brugere where active='1'") or die(mysql_error()); $count2= mysql_num_rows($res2); $res3 = mysql_query("select * from brugere where oplysninger='godkendt'") or die(mysql_error()); $count3= mysql_num_rows($res3); $res4 = mysql_query("select * from invitationer where DATE(time)=CURDATE()") or die(mysql_error()); $count4= mysql_num_rows($res4); $res5 = mysql_query("select * from brugere where inviteret_af!=''") or die(mysql_error()); $count5= mysql_num_rows($res5); $res6 = mysql_query("select * from point_log where beskrivelse='Du har har fået Medlems-garanti' and DATE(time)=CURDATE()") or die(mysql_error()); $count6= mysql_num_rows($res6);
$res = mysql_query("SELECT * FROM brugere where DATE(oprettet)=CURDATE()") or die(mysql_error()); $count = mysql_num_rows($res); echo " <tr> <td> <b>Nye brugere idag:</b><br><br>
</td> <td> $count<br><br> </td> </tr> ";
$result = mysql_query("SELECT DISTINCT bruger_id FROM online where bruger_id!='0'") or die("Midlertidig database-problem!"); $brugere_users = mysql_num_rows($result); $result = mysql_query("SELECT DISTINCT ip FROM online") or die("Midlertidig database-problem!"); $total_users = mysql_num_rows($result);
$res_saldo = mysql_query("select SUM(point) AS Point from point_log where DATE(time)=CURDATE() and type!='8' and type!='4' and type!='7' and type!='1' and beskrivelse!='Du har har fået Medlems-garanti' and point>0 and type!='99'"); $row_saldo = mysql_fetch_array($res_saldo); $saldo = $row_saldo['Point']; $res_saldo_uge = mysql_query("select SUM(point) AS Point from point_log where WEEK(time)=WEEK(NOW()) and type!='8' and type!='4' and type!='7' and type!='1' and beskrivelse!='Du har har fået Medlems-garanti' and point>0"); $row_saldo_uge = mysql_fetch_array($res_saldo_uge); $saldo_uge = $row_saldo_uge['Point']; $res_prbruger = mysql_query("select distinct bruger_id from login_log where DATE(time)=CURDATE()"); $count_prbruger = mysql_num_rows($res_prbruger); $prbruger = number_format($saldo/$count_prbruger, 0); $overskud = ($saldo-300)/4*0.7; $dkk = $saldo/4; $dkk_uge = $saldo_uge/4; echo " <tr> <td> <b>Dagens overskud:</b> </td> <td> <u>$overskud kr.</u> </td> </tr> <tr> <td> <b>Dagens omsætning:</b>
</td> <td> $dkk kr. </td> </tr> <tr> <td> <b>Ugens omsætning:</b>
</td> <td> $dkk_uge kr. </td> </tr> <tr> <td> <b>Optjente point idag:</b>
</td> <td> $saldo point </td> </tr> <tr> <td> <b>Point pr. bruger idag:</b>
</td> <td> $prbruger point </td> </tr> "; $res = mysql_query("SELECT * FROM point_log where DATE(time)=CURDATE()") or die(mysql_error()); $count = mysql_num_rows($res); echo " <tr> <td> <b>Godkendte kampagner idag: </b>
</td> <td> $count </td> </tr> ";
// Sidste login og antal login findes. $res_login = mysql_query("select distinct bruger_id from login_log where DATE(time)=CURDATE() order by time desc"); $login_count = mysql_num_rows($res_login); $res_login = mysql_query("select * from login_log where DATE(time)=CURDATE() order by time desc"); $row_login = mysql_fetch_array($res_login); if($login_count==0) { $sidstelogin = "Ingen logins registeret idag"; } else { $sidstelogin = date("d-m-y H:i", strtotime($row_login[time])); }
$res = mysql_query("SELECT * FROM point_log where DATE(time)=CURDATE() and type='5' and status='godkendt'") or die(mysql_error()); $count = mysql_num_rows($res);
$res3 = mysql_query("SELECT * FROM kampagner where type='3' and betingelser!=''") or die(mysql_error()); $count2 = 0; while($row3 = mysql_fetch_array($res3)) { $kampagne_id = $row3[id]; $res2 = mysql_query("SELECT * FROM point_log where DATE(time)=CURDATE() and kampagne_id='$kampagne_id' and status='godkendt'") or die(mysql_error()); $count2 = $count2 + mysql_num_rows($res2); }
$res3 = mysql_query("SELECT * FROM tilmeldinger where DATE(time)=CURDATE()") or die(mysql_error()); $count3 = mysql_num_rows($res3);
$res4 = mysql_query("SELECT * FROM terning_log where DATE(time)=CURDATE()") or die(mysql_error()); $count4 = mysql_num_rows($res4);
$res5 = mysql_query("SELECT SUM(point) AS Point FROM point_log where DATE(time)=CURDATE() and type='8'") or die(mysql_error()); $row_saldo = mysql_fetch_array($res5); $count5 = -$row_saldo['Point'];
$res = mysql_query("select * from brugere order by oprettet desc limit 0,10") or die(mysql_error()); bør være: $res = mysql_query("select id,[email],[active],foedselsdag from brugere order by oprettet desc limit 0,10") or die(mysql_error()); Og det bør du i øvrigt gøre ved alle dine SELECT's, hvor du kun angiver "*".
Og steder som her:
$res_online = mysql_query("select distinct bruger_id from online where bruger_id!='0'"); while($row = mysql_fetch_array($res_online)) { $id = $row[bruger_id]; $res2 = mysql_query("select * from brugere where id='$id'") or die(mysql_error()); $row2 = mysql_fetch_array($res2); $email = $row2[email]; $bruger_id = $row2[id]; $alder = age($row2[foedselsdag]); echo "<a href='brugere.php?id=$bruger_id&email=&soeg=S%F8g+i+databasen'>$email</a> ($alder år)<br>"; }
hvor du henter nogle poster med SQL og løber dem igennem med en while, og så inde i while-løkken henter du igen nogle poster med SQL - her burde du nok nøjes med én SQL, som hentede det hele én gang.
Udover det som w13 påpeger, så kunne det også være at sådan noget som dette her: $res = mysql_query("select * from brugere") or die(mysql_error()); $count_brugere = mysql_num_rows($res); $res2 = mysql_query("select * from brugere where active='1'") or die(mysql_error()); $count2= mysql_num_rows($res2); $res3 = mysql_query("select * from brugere where oplysninger='godkendt'") or die(mysql_error()); $count3= mysql_num_rows($res3); $res4 = mysql_query("select * from invitationer where DATE(time)=CURDATE()") or die(mysql_error()); $count4= mysql_num_rows($res4); $res5 = mysql_query("select * from brugere where inviteret_af!=''") or die(mysql_error()); $count5= mysql_num_rows($res5); $res6 = mysql_query("select * from point_log where beskrivelse='Du har har fået Medlems-garanti' and DATE(time)=CURDATE()") or die(mysql_error()); $count6= mysql_num_rows($res6);
bevirker at dit kode er langsom. Tænk på at hver gang din kode kører og ved hver af dine sql, så skal databasen hente ALLE data ud som passer til din sql. Og eftersom ud overhoved ikke skal bruge de data, så virker det som meget spild. Måske du skulle prøve noget i stil med: $res = mysql_query("SELECT COUNT(*) FROM brugere") or die(mysql_error()); $count_brugere = mysql_result($res, 0);
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.