我有两个表用户和联系人,其中注册用户使用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/

10-11 13:44