2016-04-09 5 views
1

私は自分のTwitterプロジェクトのソーシャルメディアを開発しています。 PHPでコードを作成し、MYSQLテーブルにユーザー、投稿、フォロワーを格納します(私の変数名はスウェーデン語なので、anvandare、inlagg、foljingarと呼ばれます)ifステートメントでin_array()を使用すると、「実行時間が30秒を超えました」というループでfalseが返されます

だから、私はそれらの投稿を表示したい以下。私が従うユーザーのすべてのユーザーIDを取得し、配列に格納することに決めました。

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

私は1つのクエリ内のすべての投稿をフェッチし、それらを書いた人は、私が

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

よしに従う人々の私の配列である場合、私がチェックするので、問題はこれがないということです作業。ブラウザでページを入力すると、フリーズしているように感じられますが、verryの時間がかかり、最大時間の致命的なエラーが表示されます。

投稿が正しく読み込まれません。それは一人の人からの投稿です(配列内の最初のpersonID)。私はin_arrayのelse文を追加しました.30秒の休憩まで無限に何度も "あなたはこの人に従ってはいけません"とエコーします。

私が間違っていることを誰かが見つけることができますか?

+0

たくさんの質問にirrelleventようです。 stackoverflowで常にあなたの質問を*簡単に*お願いします! –

答えて

1

すべての投稿を取得する必要はありません。それは時間がかかりすぎる。代わりに、データベースにこの作業を依頼する必要があります。 データベースを助け、anvandarIDフィールドにインデックスを追加すると、テーブル全体でseqスキャンができなくなり、クエリの速度と効率が大幅に向上します。

あなたはポストの選択のためのあなたのクエリにWHERE anvandarID IN()条件を追加する必要があります。それらのコードの

$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

偉大な、それは動作します!ありがとうございました。私はfetch()に変更しました。 –