php - mysql 联系人列表查询

标签 php mysql codeigniter

我正在制作一个 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_1user_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/

相关文章:

mysql - 如何修复此 MYSQL 查询

.htaccess - 删除 Windows 版 codeigniter xampp 中的 index.php

php - % _ 在搜索表单中显示所有结果

php - 将 PHP URL 变量传递给 jquery/ajax 表单

sql - 如何计算 MySQL 中的不同行数? (三栏为一体)

mysql - 使用不同条件查询同一个 SQL 表的多个实例

mysql - 按组统计字段数据库

codeigniter - 为什么除了默认 Controller 会出现 404 Page Not Found 错误

javascript - jquery 将选定的选项发送到电子邮件

php循环抛硬币直到出现2个正面,然后停止