在mysql中连接两个表并获取记录

时间:2017-11-29 13:29:07

标签: mysql phpmyadmin

我有两个表“联系人”和“用户”。用户表以“,”分隔存储数据。需要在“通讯录”列中的“通讯录”列中显示不同的数据。并且需要加入“用户”表,并获取记录。

Contacts Table
--------------------------
id |    user_Id      | contats
--------------------------
1  |   2147483647    | 90123456789,90123456789,90123456789,90123456789
2  |   2147483647    | 90123456789,90123456789,90123456789,90123456789
3  |   919444894154  | 90123456789,90123456789,90123456789,90123456789

Users Table
-----------------------------
id | username | email                  | phone
-----------------------------
1  | bhavan   | bhavanram93@gmail.com  | 90123456789
2  | bhavan   | bhavanram93@gmail.com  | 90123456789
3  | prince   | prince@gmail.com       | 1234567980
4  | bhavan   | bhavanram93@gmail.com  | 90123456789
5  | hello    | hello@gmail.com        | 1234567890
6  | bhavan   | bhavanram93@gmail.com  | 90123456789

2 个答案:

答案 0 :(得分:1)

您的表Contacts不应该以这种方式构建。

由于您希望1 Users表包含有关用户的所有数据,以及1 Contacts表包含不同用户之间的链接,因此您更喜欢这种表结构:

通讯录

id | user_id | contact_id
-------------------------
1  | 1       | 2
2  | 1       | 3
3  | 2       | 3

允许你做类似的事情:

SELECT *
FROM Users
JOIN Contacts ON (Users.id = Contacts.contact_id)
WHERE Contacts.user_id = 1

将返回用户1的联系人的所有数据。

你目前的结构是一个巨大的持续混乱,它与灵活性相反。

答案 1 :(得分:1)

您应该将您的数据库重组为标准格式,如史蒂夫建议的那样。

但如果你不能:

SELECT *
FROM Users
JOIN Contacts 
  ON CONCAT(',', Contacts.contacts, ',') like
     CONCAT('%,', Users.phone, ',%')
WHERE Contacts.user_id = 1

您的想法是将联系人转换为

,    <numbers>    ,
,90123456789,90123456789,90123456789,90123456789,

并尝试与

匹配
 %,90123456789,%

请注意,此方法无法使用任何索引,因此会对许多人产生不良影响 行。如果你的顺序是1k-10k,那么可能没问题。不仅如此,您还需要考虑重构数据库。