MYSQL PHP 查询 : Joining on more than one field

标签 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'

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

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

Bob student
Mary student
Bob programmer
Mary programmer

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

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

更新:

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

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

感谢您的任何建议。

最佳答案

试试这个:

$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'

关于MYSQL PHP 查询 : Joining on more than one field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18632687/

相关文章:

mysql - 使用 MySQL 或 Sql Server Express 处理 300 多个列

java - 在 Java 中显示列表与在 Python 中一样优雅

mysql - 加入 where 条件

MySQL - 匹配所有标签而不是任何标签

mysql - JOINing 表同时忽略重复项

mysql - 如何在mysql中将日期格式的月份减一?

mysql - 在 MySQL 中,是否可以将变量的值命名为列?

mysql - Node orm2 套接字集成

mysql - phpMyAdmin INSERT 上的警告 #1366 即使使用 BEFORE INSERT TRIGGER 代码来解决它。自然的?

mysql - 如何优化mysql 5.5存储过程