2013-08-31 70 views
0

如何修改我的代碼以允許我在每個循環中運行第二個查詢?如何在每個循環內的主要查詢中運行輔助查詢

現在我已經註釋掉了第二個查詢,因爲我確定我需要在刪除斜槓之前進行一些更改。

<?php 

$mysqli = new mysqli('LOGIN DETAILS HERE'); 

if ($mysqli->connect_error) { 
    die('Connect Error: ' . $mysqli->connect_error); 
} 

$query = "SELECT * FROM toptips WHERE userid = 2"; 
$result = $mysqli->query($query); 

while($row = $result->fetch_array()) 
{ $rows[] = $row; } 

foreach($rows as $row) { 

    $id = $row['id']; 
    echo $row['time'] . " " . $row['course'] . " - " . $row['horse'] . " " . $row['description'] ."<br/>"; 

     // second query here 
    // $query2 = "SELECT likes FROM Likes_table WHERE id = $id"; 
    // $result = $mysqli->query($query2); 
    // while($row = $result->fetch_assoc()){ 
    // echo $row['likes'] . '<br />'; 
    // } 

} 

?> 
+0

取消註釋您的代碼,它對我來說看起來很好 – Satya

回答

1

更好地利用INNER JOIN:

SELECT 
    toptips.*, 
    Likes_table.likes 
FROM 
    toptips 
INNER JOIN 
    Likes_table 
ON 
    Likes_table.id=toptips.id 
WHERE 
    toptips.userid = 2 

這將節省您大量的資源被去除內循環。

+0

雅,完全同意。看起來您已經獲得了執行第一個查詢時所需的所有信息,以便還可以檢索第二個查詢將返回的數據集。 通過對第一個查詢返回的每條記錄執行第二個查詢,您已經創建了一個[「n + 1」問題](http://www.pbell.com/index.cfm/2006/9/17/瞭解最N1-查詢問題)。通常情況下,這不會引起任何明顯的性能問題,但解決方案是如此簡單的優化,以至於使用它都是有意義的。 – Colin