我有两个表用户和联系人,其中注册用户使用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''的文件,并以sachin的user_id =“ 1''另存为``xyz''(没关系)
6)所以我只想让那些拥有我的号码并且拥有我的用户。(最终结果)
最佳答案
我相信您需要重新设计架构,因为(据我所知)您拥有一个主用户表,并且具有一项功能,该功能允许用户将其他用户添加为他的联系人,因此您需要跟踪哪个用户用户是其他用户的联系人。
表格联系人不需要保留姓名或电话号码。该数据必须始终来自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上创建唯一索引以增强您的查询。
关于php - 连接两个表的麻烦,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25403975/