webForumDet fria alternativet

Fel i SQL-hämtning med LIMIT

10 svar · 228 visningar · startad av filipbh

filipbhMedlem sedan juli 2002405 inlägg
#1

Använder nedanstående kod på min sida.. Den ska hämta alla bilder från en databas och skriva ut fem på varje rad. Problemet är att det tar jättelång tid att ladda sidan och det kommer upp: "Fatal eror: Maximum execution time of 30 seconds exeeded in /url/fil.php". Det kommer även massa tomma rader under... Vad är det för fel??

echo "<table>";

$rows=$new_memb_pic+2;
$i=0;
while($i<$rows){
echo "<tr>";
$open = mysql_connect ("localhost", "","");
$sql = "SELECT * FROM tabell WHERE status=1 ORDER BY id ASC LIMIT ".$i." , 5";
$result = mysql_db_query("","$sql");

while($medlbilder=mysql_fetch_array($result)){
echo "<td><img src=\"/profiler/" . $medlbilder[personid] . "/bilder/" . $medlbilder[filnamn] . "\" width=150 height=100 border=0 alt=\"Klicka för att 

förstora\"><br>Uppladdad: " . date("ymd \k\l\. H:i", $medlbilder[uppladdad]). " av " . $medlbilder[person] . ".<br><a 

href=\"fil.php?visa=uppladdade&vad=uppladdad&svar=ja&vilken=".$medlbilder[id]."\">Godkänn</a>/<a 

href=\"fil.php?visa=uppladdade&vad=uppladdad&svar=nej&vilken=".$medlbilder[id]."\">Neka</a></td>";

$i = $i+1;
 }
}
echo "</table>";
MatteMedlem sedan aug. 20002 975 inlägg
#2

Du har en tom sträng som namn på din databas i mysql_db_query(). Ange databasnamn där.

Eller ännu hellre använda kombinationen mysql_select_db/mysql_query istället, för som det står i manualen om mysql_db_query:

manualen skrev:

This function has been deprecated since PHP 4.0.6. Do not use this function. Use mysql_select_db() and mysql_query() instead.

Det blir alltså:

$open = mysql_connect ("localhost", "","");
mysql_select_db('databasnamn', $open);
$sql = "SELECT * FROM tabell WHERE status=1 ORDER BY id ASC LIMIT ".$i." , 5";
$result = mysql_query($sql);
filipbhMedlem sedan juli 2002405 inlägg
#3

Jag har databasnamn där.. Bara nu när jag la upp koden som jag tog bort det.

Ska iaf testa med ditt nya sätt...

filipbhMedlem sedan juli 2002405 inlägg
#4

Det tar fortfarande väldigt lång tid, felmeddelandet kommer fortfarande upp och sidan blir jättelång pga. tomma rader som skrivs ut. Jag har mer poster i gästboken och den hämtas med limit men är ändå lika snabb som sql-hämtningarna på alla de andra sidorna. Bara just den här hämtningen som är seg.

MatteMedlem sedan aug. 20002 975 inlägg
#5

Får jag fråga vad du tänkt ha detta till:

while($i<$rows){

Det innebär att först hämtar du 0-4, nästa varv hämtar du 1-5, sedan 2-6 o.s.v.
För varje varv gör du dessutom en ny anslutning till MySQL.

Varför while-satsen överhuvudtaget ?

Beskriv vad du försöker göra.

filipbhMedlem sedan juli 2002405 inlägg
#6

$rows räknar hur många poster det finns i databasen.. Därför har jag ha en while-sats som ska köras så länge det finns poster. Kanske är onödigt... Vad vet jag. Sen ska den skriva ut fem poster på varje rad. Så finns det fler än fem poster skapas en ny rad och skriver ut fem till. $i = $+1 adderar ju 1 för varje post som skrivs ut. Så när den skrivit ut fem poster så är $i 4 och den börjar med post fem och skriver ut. Kanske är krångligt att läsa men du förstår nog...

filipbhMedlem sedan juli 2002405 inlägg
#7

Den skriver ut rätt. Problemet är ju som sagt att det tar lång tid och det kommer upp mycket tom plats under sista raden...

MatteMedlem sedan aug. 20002 975 inlägg
#8

Testa så här:

echo "<table>";
echo "<tr>";

$open = mysql_connect ("localhost", "","");
$sql = "SELECT * FROM tabell WHERE status=1 ORDER BY id ASC";
$result = mysql_db_query("","$sql");

$i = 0;
while($medlbilder=mysql_fetch_array($result)){

   echo "<td><img src=\"/profiler/" . $medlbilder['personid'] . "/bilder/" . $medlbilder['filnamn'] . "\" width=150 height=100 border=0 alt=\"Klicka för att 

   förstora\"><br>Uppladdad: " . date("ymd kl. H:i", $medlbilder['uppladdad']). " av " . $medlbilder['person'] . ".<br><a 

   href=\"fil.php?visa=uppladdade&vad=uppladdad&svar=ja&vilken=".$medlbilder['id']."\">Godkänn</a>/<a 

   href=\"fil.php?visa=uppladdade&vad=uppladdad&svar=nej&vilken=".$medlbilder['id']."\">Neka</a></td>";

   $i++;
   
   if ($i % 5 == 0) {
      echo "</tr>\n<tr>\n";
   }
   
   
}

echo "</tr></table>";
filipbhMedlem sedan juli 2002405 inlägg
#9

$i=0 måste väl vara ovanför $open? Det visade fel när den var innan för... Den skriver ut fem bilder nu och det går fort.. Men jag har mer än fem poster i databasen så det ska skrivas ut en till rad men det görs inte.. Annars så fungerar det bra och snabbt...

MatteMedlem sedan aug. 20002 975 inlägg
#10

Jag glömde ta bort LIMIT först.
Du kanske hann se det innan jag redigerade?

filipbhMedlem sedan juli 2002405 inlägg
#11

Tackar Matte! Du löser alltid mina problem =)

138 ms totalt · 3 externa anrop · v20260731065814-full.beb2e261
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)