2011-11-18 62 views
0

我試圖找出'x'的朋友是誰,並使用該數組數據來查詢另一個表。替代的查詢

我有什麼到目前爲止

<? 
session_start(); 
$user = $_SESSION['username']; 
include($_SERVER['DOCUMENT_ROOT'].'/assets/global/scripts/***.php'); 
$data = mysql_query("SELECT * FROM hotm**e_rates WHERE (SELECT * FROM hot**e_friends WHERE f1='$user' OR f2='$user') ORDER BY id LIMIT 0,1"); 
$row = mysql_fetch_assoc($data); 
if($row['f1']==$user) { 
echo $row['f2']; 
}else{ 
echo $row['f1']; 
} 
?> 

,這並不工作。 :( 錯誤是返回val爲一個bool

關於如何解決此問題或使用替代

感謝任何想法:?!d

+4

我認爲你的表名檢查是沒有意義的。很明顯,這些表被稱爲'hotmate_ *' – ThiefMaster

+1

我很確定它是'hotmule_ *' – nachito

+0

看來你並沒有完成'where'之後的條件。 – Young

回答

0

我不認爲你可以像傑夫建議的那樣做 - 如果用戶有超過1的友誼,那麼它會失敗,因爲子查詢將返回多行。我假設在hotm ** e_rates表中有一個字段「用戶名」,我們可以使用它來加入。我還提出,要獲取與$用戶的朋友相關聯的所有_rates的假設:

SELECT 
    r.*, 
    f.f1, 
    f.f2 
FROM 
    hotm**e_rates r, 
    hotm**e_friends f 
WHERE 
    (f.f1 = '$user' 
AND r.username = f.f2) 
OR (f.f2 = '$user' 
AND r.username = f.f1) 

我不能完全肯定,如果上述工作會因爲它在不同領域的動態加盟...這可能會有問題,我還沒有測試過,如果它不起作用,那麼你應該可以通過聯合做到這一點,分別加入f1和f2並將結果集合在一起:

( SELECT 
     r.*, 
     f.f1, 
     f.f2 
    FROM 
     hotm**e_rates r, 
     hotm**e_friends f 
    WHERE 
     f.f1 = '$user' 
    AND r.username = f.f2 
) UNION (
    SELECT 
     r.*, 
     f.f1, 
     f.f2 
    FROM 
     hotm**e_rates r, 
     hotm**e_friends f 
    WHERE 
     f.f2 = '$user' 
    AND r.username = f.f1 
) 
1

返回的值是布爾由於發生錯誤。在你的MySQL查詢 你必須設置像WHERE [main_query_table] = (SELECT [table_field] FROM hot**e_friends WHERE f1='$user' OR f2='$user')

參考文獻:

+0

哦!我認爲這與我不知道的一個工會有什麼關係。我沒有意識到你必須這樣做!謝謝! :) – unicornication

+0

@ user1053076如果此答案解決了您的問題,請將其設置爲已接受(V標記)。 :) – Shoe