我有两个表用户和联系人,其中注册用户使用csv添加记录以及他们在联系人表中的ID。
我的表格结构
user
id name phone_no verify
1 sachin 123 yes
2 max 345 yes
3 john 99 yes
contacts
contacts_id name phone_no user_id
1 xyz 345 1
2 abc 123 2
3 john 99 1
结果
1) search phone_no '123' from contacts table
contacts_id name phone_no user_id
2 abc 123 2
2) i got my number '123' in 2nd row will check who has my number so got user_id='2'
3) now i have checked whether 'max' (id='2') has phone_no ('123') in contacts table
4) So max phone_no is '345'
contacts_id name phone_no user_id
1 xyz 345 1
5)我得到最大数字'345',用user_id ='1'保存为'xyz'(无关紧要),这是sachin
6)所以我只想让那些拥有我的号码并且拥有我的用户。(最终结果)
答案 0 :(得分:0)
我相信你需要重新设计你的架构,因为(据我所知)你有一个主用户表,你有一个功能允许用户添加其他用户作为他的联系人,所以你需要保持跟踪哪些用户是其他用户的联系人。
表联系人不需要包含姓名或号码。该数据必须始终来自users表以确保一致性。
用户强>
id name phone_no verify
1 sachin 15123 yes
2 max 26345 yes
3 john 37345 yes
4 peter 48345 yes
5 sam 59345 yes
联系人强>
relation_id relation_owner relation_target
1 1 2
2 1 3
3 2 3
4 2 4
5 2 5
6 3 1
这样,您要回答的问题将通过以下查询解决
select u1.name as me,
u2.name as contact
from users u1
join contacts c1 on u1.id=c1.relation_owner
join contacts c2 on c2.relation_owner=c1.relation_target and c2.relation_target=c1.relation_owner
join users u2 on c2.relation_owner=u2.id
where u1.id=:userid
现在,如果我尝试对你的架构做同样的事情。
用户
id name phone_no verify
1 sachin 123 yes
2 max 345 yes
联系人
id name phone_no user_id
1 xyz 345 1
2 abc 123 2
修改澄清之后
获取用户1(sachin)的联系人
select u1.name as me,
u2.name as contact
from user u1
join contacts c1 on u1.phone_no = c1.phone_no
join user u2 on c1.user_id=u2.id
where user.id=1
获取用户sachin的联系人,反过来,他们在他们的联系人中有sachin
select u1.name as me,
u2.name as contact
from user u1
join contacts c1 on u1.phone_no = c1.phone_no
join user u2 on c1.user_id=u2.id
join contacts c2 on u2.phone_no = c2.phone_no and c2.user_id=u1.id
where u1.id=1
我建议在contacts.phone_no上创建索引,并在users.phone_no上创建唯一索引以增强查询。