2012-06-12 67 views
2

我從數據庫中得到一堆id - 對於每個id,我想執行一個mysql查詢來獲取另一個表中的相關行。這工作正常,但我也需要獲取登錄用戶的類似數據。使用我正在使用的mysql查詢 - 它根據最初拉出的ID數重複登錄的用戶數據。這是有道理的,雖然不是我想要的。我不希望重複的數據爲登錄用戶,我需要數據來自一個查詢,所以我可以用時間戳命令的東西。在php while循環中重複

<?php 
    mysql_select_db($database_runner, $runner); 
    $query_friends_status = "SELECT DISTINCT rel2 FROM friends WHERE rel1 = '" . $_SESSION ['logged_in_user'] . "'"; 
    $friends_status = mysql_query($query_friends_status, $runner) or die(mysql_error()); 
    $totalRows_friends_status = mysql_num_rows($friends_status); 

    while($row_friends_status = mysql_fetch_assoc($friends_status)) 
    { 
     $friends_id = $row_friends_status['rel2']; 
     mysql_select_db($database_runner, $runner); 
     $query_activity = "SELECT * FROM activity WHERE user_id = '$friends_id' OR user_id = '" . $_SESSION['logged_in_user'] . "' ORDER BY `timestamp` DESC LIMIT 15"; 
     $activity = mysql_query($query_activity, $runner) or die(mysql_error()); 
     $totalRows_activity = mysql_num_rows($activity); 
     echo "stuff here"; 
    } 
?> 
+0

不建議使用php mysql_函數,請查看mysqli_函數,這是一種更新,更快,更安全的在php中執行mysql查詢的方式。 –

+1

您應該使用JOIN語句,您應該也可能使用mysqli或PDO而不是mysql_ *。 –

+3

您的代碼也遭受[N + 1問題](http://stackoverflow.com/questions/97197/what-is-the-n1-selects-problem)。 –

回答

1

你可以試試這個單一的查詢,看看它做什麼,你需要

$userID = $_SESSION['logged_in_user']; 
"SELECT * FROM activity WHERE user_id IN (
    SELECT DISTINCT rel2 FROM friends 
    WHERE rel1 = '$userID') 
OR user_id = '$userID' ORDER BY `timestamp` DESC LIMIT 15"; 
+0

真的很好 - 歡呼聲 – Jeff

+0

偶然發現了這一點,它真的幫助我查詢查詢內循環問題,我有。謝謝。 +1 –

0

你可能想是這樣的:

$user = $_SESSION['logged_in_user']; 
  $query_friends_status = "SELECT * FROM friends, activity WHERE activity.user_id = friends.rel2 AND rel1 = '$user' ORDER BY `timestamp` DESC LIMIT 15"; 

您可以替換*帶你但要記住要將表名稱放在字段名稱之前,例如:

table_name.field_name

我希望這有助於。

+0

乾杯弗蘭克 - 第一個建議工作,但感謝幫助 – Jeff

+0

是的第一個建議看起來更好,我會用我的:P –