2011-10-02 80 views
1

我在這裏需要一些幫助,選擇多個表

table "friends" 
+------+-------------+-----------+ 
    id | friend_id | user_id | 
+------+-------------+-----------+ 
    1 | 1222  | 99999 | 
+------+-------------+-----------+ 
    2 | 48989  | 1492 | 
+------+-------------+-----------+ 

table "users" 
+------+-------------+---------------+ 
    id | user_name | user_image | 
+------+-------------+---------------+ 
99999 |  Mark | img/abc.jpg | 
+------+-------------+---------------+ 
1222 |  Tom  | img/xyz.jpg | 
+------+-------------+---------------+ 
etc. | etc.  |  etc.. | 
+------+-------------+---------------+ 

我想SELECT表的朋友,讓WHERE語句:

等等...其中USER_ID = $ _ SESSION [USER_ID] ... 並將顯示錶用戶的數據

好吧,說: 我目前的ID是99999,所以在表中的朋友只匹配1222,所以這將顯示所有數據(圖像等..)從ID 1222(湯姆)來自表格用戶。

所以我的問題在這裏是我需要如何編寫這段代碼來生成用戶數據?

*我嘗試使用UNION和LEFT JOIN..but沒有luck..still新手..

回答

4
$user_id = intval($_SESSION['user_id']); 
$friends_of_user = mysql_query(' 
SELECT 
    f.*, u.* 
FROM 
    friends f 
    LEFT JOIN 
     users u 
    ON 
     u.id = f.friend_id 
WHERE 
     f.user_id = '.$user_id); 

,並排除不具有在用戶表中的配置文件的所有用戶,只要改變LEFT JOINJOIN

+0

@ruslyrossi,如果你想避免用戶不使用的朋友內部聯接。 – Johan

+0

@Johan:可能不正確。在這種情況下,LEFT JOIN意味着所有沒有配置文件的朋友將顯示爲NULL – genesis

+0

嗯你需要做'選擇任何來自用戶的內部加入朋友f ...在我腦海中這就是你沒有。 – Johan

2

我會用下面的代碼:

$user_id = mysql_real_escape_string($_SESSION['user_id']); 
$sql = "SELECT f.* 
     FROM users u 
     INNER JOIN friends f ON (u.user_id = f.friend_id) 
     WHERE u.user_id = '$user_id' "; 
+0

upvote用於通用(對於字符串id和int也是如此) – genesis