我正在制作一个codeigniter webapp,用户可以在联系人列表中互相添加。
表格如下:
`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`)
发出添加联系人请求的用户的用户ID 始终存储在 user_1 列中。其他用户用户ID 存储在 user_2 中。然后 user_2 必须接受请求,并且“已接受”列会更新为 1 。
我想列出html表中接受的所有联系人(WHERE accepted = 1),以及另一个联系人请求(accepted = 0)。 我的问题是:我如何创建一个mysql查询,选择所有行,只是从联系人获取用户ID?这是一个问题,因为它们可以是 user_1 或 user_2 (取决于他们是否请求或接受)。
我应该以某种方式更改db表来实现此目的。或者我可以进行查询(最好是活动的rcords)来实现这个目标吗?
感谢任何帮助
提前致谢
乔治
更新
所以最终查询如下所示:
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')
完全按照我的描述工作:)
答案 0 :(得分:1)
使用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 = ?
答案 1 :(得分:0)
联系人列表不应归用户所有吗?
create table Contactlist (
OwnerID int, -- ID of the owning User
ContactID int, -- ID of the contact User
Accepted bool)
-- With composite primary key on OwnerID, ContactID
这样查询就可以了 <击> 撞击>
<击>select * from User
left outer join Contactlist on User.ID = Contactlist.OwnerID
left outer join User as Contact on Contactlist.ContactID = Contact.ID
击> <击> 撞击> 对不起......选择了Overthunk;)
select * from Contactlist
inner join User on Contactlist.ContactID = User.ID
where Contactlist.OwnerID = <the querying users ID>
(MSSQL语法)
答案 2 :(得分:0)
您可以使用查询,但稍后会产生问题,因为我之前也遇到过这个问题。当用户接受请求并将新记录标记为已接受时,您可以在同一个表中插入新条目,但这次user_1变为user_2,反之亦然。
答案 3 :(得分:0)
使用连接的别名是我认为你要问的。
类似的东西。
Select c.id, uRequest.UserName, uRequested.UserName From Contacts c
inner join Users As uRequest On c.User_1 = uRequest.id
inner join Users As uRequested On c.User_2 = URequested.id
Where accepted = 1
将为您提供已接受请求的所有联系人。