2016-04-09 10 views
1

Ich entwickle meine eigenen Twitter-Stil Social Media für ein Schulprojekt. Ich Code in PHP und speichern Benutzer, Beiträge und Follower in MYSQL-Tabellen (meine Variablennamen sind in Schwedisch daher sie heißen: anvandare, inlagg und foljningar)Verwenden Sie in_array() in if-Anweisung gibt false in einer Schleife, die zu "Maximale Ausführungszeit von 30 Sekunden überschritten"

So jetzt möchte ich nur zeigen, Post von denen ich bin Folgendes. Ich entschied mich, alle Benutzer-IDs von denen ich folge und sie in einem Array zu speichern.

$sqlfoljer="select foljarid, foljdid from foljningar where foljarid =$anvandarID"; 

$stmt = $conn->prepare($sqlfoljer); 
$stmt->execute(); 

$row = $stmt->fetch(); 

if (!$row) 
{ 
    echo "You are not following anyone."; 
    die(); 
} 

$foljer = array(); 

while ($row != null) 
{ 
    array_push($foljer, $row['foljdid']); 

$row = $stmt->fetch(); 
} 

Ich hole alle Beiträge in einer Abfrage und dann überprüfe ich, ob die Person, die schrieb sie in meiner Reihe der Leute I

$sql = "select id, datumskapat, text, bild, anvandarID, namnAnvandare from inlagg order by datumskapat desc"; 

$stmt = $conn->prepare($sql); 

$stmt->execute(); 

$row = $stmt->fetch(); 

if (!$row) 
{ 
    exit(); 
} 

while ($row != null) 
{ 
    $anvandarID = $row['anvandarID']; 
    $inlaggsid = $row['id']; 

    if(in_array($anvandarID, $foljer)) 
    { 
     $sqlgillar = "select count(*) as antalgillar from gillningar where inlaggsid = :inlaggsid"; 

     $params2 = array(':inlaggsid'=>$row['id']); 

     $stmt2 = $conn->prepare($sqlgillar); 

     $stmt2->execute($params2); 

     $row = $stmt2->fetch(); 


      if ($bild != null) 
      { 
       //Lägg tll bild 
       echo "<img src=\"visabild.php?id=$inlaggsid\" alt=\"Bild\" />"; 
      } 

      } 
          $row = $stmt->fetch(); 
     } 
     else 
     { 
      echo"You dont follow this person"; 
     } 
    } 

Ordnung folgen, so dass das Problem ist, dass dies nicht Arbeit. Wenn ich die Seite im Browser betrete, fühlt es sich an, als würde sie einfrieren, aber es dauert nur sehr lange und dann erhalte ich den Fatalen Fehler von Maximale Zeit.

Die Posts werden nicht korrekt geladen. Es sind nur Beiträge von einer Person (die erste personID im Array). Ich fügte eine else-Anweisung für das in_array hinzu und es echote "Du folgst dieser Person nicht" unendlich viele Male bis zur 30 Sekunden Pause.

Kann jemand finden, was ich falsch mache?

+0

eine Menge von diesen Code auf die Frage irrellevent scheint. Bitte stellen Sie sicher, dass Sie Ihre Fragen immer * einfach * auf stackoverflow stellen! –

Antwort

1

Sie sollten nicht alle Beiträge erhalten und überprüfen Sie den Autor, wenn Sie ihnen folgen. Es braucht auch Log-Zeit. Stattdessen sollten Sie die Datenbank bitten, diese Arbeit zu erledigen. Sie können Ihrer Datenbank helfen und den Index für das Feld anvandarID hinzufügen, wodurch der Seq-Scan über die gesamte Tabelle verhindert und die Abfragegeschwindigkeit und -effizienz erheblich verbessert werden.

Sie sollten WHERE anvandarID IN() Zustand in Ihre Abfrage für die Zeit nach Auswahl hinzufügen:

$in = str_repeat('?,', count($foljer) - 1) . '?'; 
$sql = "select id, datumskapat, text, bild, anvandarID, namnAnvandare from inlagg 
    WHERE anvandarID IN ($in) order by datumskapat desc"; 

$stmt = $conn->prepare($sql); 
$stmt->execute($in_array); 
$data = $stmt->fetchAll(); 
+0

Großartig, es funktioniert! Vielen Dank. Ich habe gerade geändert, um nur zu holen() –

Verwandte Themen