PHP链接表的MySQL查询

时间:2014-08-26 11:05:17

标签: php mysql sql

我想问你关于Facebook的朋友建议。

我有2个表,那是:tb_user和tb_friend。

tb_user

uid | username | full_name
1   | dean     | Dean Cool
2   | ryanblk  | Ryan Black
3   | maria    | Maria Bellen
4   | greg     | Greg Munch

tb_friend

friend_one_id | friend_two_id | status
1             | 2             | 1
1             | 4             | 1
3             | 4             | 1

状态: 1 - >朋友

现在我想查询tb_user与tb_friend的链接。条件,如果从不是朋友(状态不是1),则将其显示给建议朋友。

到目前为止我的SQL查询:

$uid --> my session

SELECT 
    U.uid, U.username, U.full_name FROM tb_user U 
WHERE 
    U.uid != '$uid' ORDER BY RAND() LIMIT 3

请帮忙!

1 个答案:

答案 0 :(得分:0)

我有一个类似的场景,我用它作为查询字符串

$query = "SELECT * FROM friend_table,user_table
WHERE ((from_id = '".$_SESSION['logged_user_id']."' AND friend_table.to_id = user_table.user_id)
              OR 
           (to_id = '".$_SESSION['logged_user_id']."' AND friend_table.from_id = user_table.user_id))
           AND 
             friend_table.status <> '1'";

我正在编辑我的db_structure,以便您理解

[WAIT TILL I GIVE DB STRUCTURE SO THAT YOU UNDERSTAND. I AM EDITING THE ANSWER]

我的数据库结构就像这样

user_table

|-------------------------------------------------------------|
|   user_id    |   username  |    first_name  |  last_name    |
|-------------------------------------------------------------|
|     1        |   smruti    |     Smruti     |    Singh      |
|-------------------------------------------------------------|
|     2        |   sunaina   |    Sunaina     |    Singh      |
|-------------------------------------------------------------|

我的friend_table用于存储朋友之间的真实情况

|-------------------------------------------------------------|
| relation_id  |   from_id   |    to_id       |    status     |
|-------------------------------------------------------------|
|     1        |      1      |       2        |      1        |
|-------------------------------------------------------------|
|     2        |      3      |       4        |      0        |
|-------------------------------------------------------------|

修改

这将显示不是您朋​​友的用户的所有结果。

记住一件事,如果您向某人发送了请求,则会将一行插入到状态为0的friend_table中。如果他/她接受,则状态变为1.如果他/她拒绝,则状态变为2。如果状态为2,您可以再次向他/她发送请求。

所以这里的user_id要么出现在friend_table中,状态不等于1,要么根本不存在。

$query = "SELECT * FROM user_table WHERE user_id NOT IN 
                  (
                       SELECT user_id FROM friend_table,user_table
                        WHERE ((from_id = '".$_SESSION['logged_user_id']."' AND    
                                 friend_table.to_id = user_table.user_id)
                                      OR 
                               (to_id = '".$_SESSION['logged_user_id']."' AND 
                                 friend_table.from_id = user_table.user_id))
                               AND 
                                  friend_table.status = '1')";