MYSQL PHP查询:加入多个字段

时间:2013-09-05 09:32:19

标签: mysql join

社交网站的我的表格方案如下:

users
id|username
1|bob
2|mary
3|ken

userinfo
id|userid|handle|description
1|1|bobbie|student
2|2|Mary1|programmer

network
id|inviterid|invitedid|status
1|1|2|2
2|1|3|2

当一个人邀请另一个人加入他/她的网络时,会在状态为1的网络表中输入一个条目。如果请求被接受,状态将变为2.到目前为止一直很好。

但是,我在加入其他桌子时遇到某人网络成员的问题,因为实际上我必须加入多个字段,因为该人可以是邀请者,也可以是受邀者。

以下是获取网络成员的查询

//$id = id of logged in user
$sql = "SELECT * FROM `network` n
LEFT JOIN `userinfo` ui
on n.invitedid= ui.userid OR n.inviterid = ui.userid
LEFT JOIN`users` u
on n.invitedid= u.id OR n.inviterid = n.id
WHERE status='2'

并非所有用户都拥有userinfo记录,因为并非每个人都填写了个人资料。但我也希望得到这些。

Bob的网络查询结果,即$ id = 1:

Bob student
Mary student
Bob programmer
Mary programmer

注意它包括bob,即使他应该被排除在外,使用Bob的信息用于Mary并排除Ken,因为他没有userinfo记录。

以上查询为具有配置文件的用户提供多条记录,为登录用户提供记录,并排除任何没有配置文件的记录。我想排除登录用户,然后为他/她的网络的每个成员(包括没有个人资料的成员)排除一条记录。

更新

将WHERE更改为以下内容会排除用户自己的个人资料,这会有所帮助,但仍会排除没有个人资料的成员:

WHERE status = '2' AND ui.userid <> '$id'

感谢您的任何建议。

1 个答案:

答案 0 :(得分:0)

试试这个:

$sql = "SELECT * FROM `network` n
LEFT JOIN `userinfo` ui
on n.invitedid= ui.userid OR n.inviterid = ui.userid
RIGHT JOIN`users` u
on n.invitedid= u.id OR n.inviterid = n.id
WHERE status='2'