2011-10-02 58 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