2016-04-09 25 views
1

Okul projesi için kendi Twitter stili sosyal medyanızı geliştiriyorum. PHP'de kod ve MYSQL tablolarında kullanıcılar, mesajlar ve takipçileri depolarım (değişken isimlerim İsveççe olduğu için bu yüzden adlandırılırlar: anvandare, inlagg ve foljningar)In_array() ifadesi, "30 saniyenin maksimum yürütme süresi aşıldı" ile sonuçlanan bir döngüde false döndürürse,

Şimdi sadece gönderdiğim kişiden takip etme. Takip ettiğim kullanıcıların tüm kullanıcı kimliklerini almaya ve bir dizide saklamaya karar verdim.

$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(); 
} 

Bir sorguda tüm mesajları getir ve onları insanların benim dizide olduğu yazan kişi ben Tamam

$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"; 
     } 
    } 

takip ederseniz o zaman kontrol, bu yüzden sorun bu değil yapmasıdır iş. Sayfayı tarayıcıya girdiğimde, donma gibi geliyor, ama sadece uzun bir zaman alıyor ve sonra Maksimum zamanın Ölümcül hatasını alıyorum.

Yayınlar düzgün yüklenmemiş. Sadece bir kişiden gelen mesajlardır (dizideki ilk kişi kimliği). In_array için başka bir ifade ekledim ve "Bu kişiyi takip etmiyorsun" ifadesini 30 saniyelik ara verene kadar birçok kez sonsuza kadar ekledim.

Birisi yanlış yaptığımı bulabilir mi?

+0

sürü soruya irrellevent görünüyor. Lütfen sorularınızı her zaman sorduğunuzdan emin olun * basitçe * stackoverflow'ta! –

cevap

1

Tüm gönderileri almamalı ve bunları takip ederseniz yazarına bir göz atmalısınız. Çok zaman alır. Bunun yerine, bu işi yapmak için veritabanı sormalısınız. Veritabanınıza yardımcı olabilir ve anvandarID alanından indeks ekleyebilir ve bu da tüm tablo üzerinde taramayı önleyebilir ve sorgu hızını ve verimliliğini önemli ölçüde artırabilirsiniz.

Sen sonrası seçerek için sorguya WHERE anvandarID IN() koşul eklemek gerekir: bu kodun

$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

Harika, işe yarıyor! Teşekkür ederim. Sadece yeni almayı seçtim() –

İlgili konular