我正在制作一个 codeigniter Web 应用程序,用户可以在其中将彼此添加到联系人列表中。
表格如下所示:
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_1` int(11) NOT NULL,
`user_2` int(11) NOT NULL,
`accepted` tinyint(2) NOT NULL,
PRIMARY KEY (`id`)
发出添加联系人请求的用户的userid始终存储在user_1列中。其他用户userid存储在user_2中。然后,user_2 必须接受请求,并且“已接受”列将更新为 1。
我想在一个 html 表中列出所有已接受的联系人(已接受 = 1),并在另一个表中列出联系人请求(已接受 = 0)。 我的问题是:如何进行 mysql 查询来选择所有行并从联系人中获取用户 ID?这是一个问题,因为他们可以是 user_1 或 user_2(取决于他们是否请求或接受)。
我应该以某种方式更改数据库表来实现这一目标吗?或者我可以进行查询(最好是事件记录)来完成此任务?
感谢任何帮助
提前致谢
乔治
更新:
所以最终的查询如下所示:
SELECT DISTINCT users.id, users.username, contacts.accepted
FROM users
LEFT JOIN contacts ON users.id = contacts.user_1
WHERE contacts.user_2 = ' . $this->session->userdata('user_id') . '
UNION DISTINCT
SELECT DISTINCT users.id, users.username, contacts.accepted
FROM users
LEFT JOIN contacts ON users.id = contacts.user_2
WHERE user_1 = ' . $this->session->userdata('user_id')
并且工作原理与我描述的完全一样:)
最佳答案
使用UNION
查询。请参阅documentation .
SELECT DISTINCT user_1 userid FROM user WHERE accepted = 1
UNION DISTINCT
SELECT DISTINCT user_2 userid FROM user WHERE accepted = 1
关于连接,您可以对 UNION
的每个部分使用如下所示的内容
SELECT DISTINCT users.userid, users.username, contacts.accepted
FROM users
LEFT JOIN contacts ON users.userid = contacts.user_1
WHERE contacts.user_2 = ?
关于php - mysql 联系人列表查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8151744/