2012-12-28 100 views
1

我目前習慣於使用while循環與我的查詢將值分配給稍後在代碼中使用的變量。有時候,這會變得很荒謬,因爲我使用了一些while循環來集合我需要的所有變量,以將來自我數據庫中幾個不同表的所需輸出組合在一起。 我對PHP仍然很陌生,並且開始有種感受pdo的感覺,我想。但是,我不知道爲我的變量分配所需值的更好方法。下面的代碼是我正在談論的一個非常簡短的例子,只是爲了清楚我的英文不好。下面的代碼是垃圾,但是是一個例子。我非常感謝任何建議,方向或對此的洞察。非常感謝!替代在while循環中分配變量值?

<?php 
$stmt = $core->dbh->prepare("SELECT `user` FROM `buddies` WHERE `id` = ?"); 
     $stmt->bindParam(1, $id); 
     $stmt->execute(); $u = ""; $fname = ""; $lname = ""; $burger = ""; 
     while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { 
      $u = $row['user']; 
      $stm = $core->dbh->prepare("SELECT fname,lname FROM `users` WHERE id = ?"); 
      $stm->bindParam(1, $u); 
      $stm->execute(); 
      while ($rot = $stm->fetch(PDO::FETCH_ASSOC)){ 
       $fname = $rot['fname']; $lname = $rot['lname']; 
       $st = $core->dbh->prepare("just another query that uses the last values assigned to variables returns") 
           $st->bindParam(1, $variable) 
           $st->execute 
           $burger = $st->fetchColumn(); 
      }//end of the second while loop of this function 
     } //end of while statement 

echo $u." - ".$fname." ".$lname." text: ".$burger; 

?> 
+0

如果你的表格結構合理,你可能只需要在一個使用連接的查詢中獲得更多的數據。 – 2012-12-28 03:32:42

+0

您應該將其中一部分用外連接插入SQL中,然後循環一次並創建單個數據結構。您擁有的代碼不僅令人費解,而且由於嵌套的n + 1樣式查詢而受到可怕的性能問題。 –

+0

你爲什麼不加入不同的查詢?你的第一個2個查詢可以很容易'SELECT users.fname,users.lname FROM users as users INNER JOIN user as user ON users.id = user.user WHERE user.id =?' – kennypu

回答

1

使用JOINs

例如,合併的前兩個查詢,如

SELECT buddies.user, users.fname, users.lname FROM buddies JOIN users ON buddies.id=users.id 

你可能還是要用根據情況可變分配。但是,絕對可以減少while循環的次數。如果這些表最有可能存在共同字段,那麼您在那裏有一個關聯,而JOIN則是要走的路。

+0

哇,酷!我將閱讀更多關於這個JOIN的東西。我其實從來沒有聽說過。非常感謝你們。 –

+0

+1不要盲目追蹤問題,因爲它被問到,但建議正確的方法。 –