在mysql中连接两个表并获取记录
我有两个表“联系人”和“用户”。存储数据的用户表以“,”分隔。需要将“联系人”列中的数据与“联系人”表中的数据区分开来。并且需要加入“用户”表,并获取记录在mysql中连接两个表并获取记录,mysql,phpmyadmin,Mysql,Phpmyadmin,我有两个表“联系人”和“用户”。存储数据的用户表以“,”分隔。需要将“联系人”列中的数据与“联系人”表中的数据区分开来。并且需要加入“用户”表,并获取记录 Contacts Table -------------------------- id | user_Id | contats -------------------------- 1 | 2147483647 | 90123456789,90123456789,90123456789,90123456789 2
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
您的表
联系人
不应以这种方式构建
由于您希望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个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的联系人的所有数据
您当前的结构非常混乱,这与灵活性正好相反。您应该按照Steve的建议将数据库重组为规范化格式
但如果你不能:
SELECT *
FROM Users
JOIN Contacts
ON CONCAT(',', Contacts.contacts, ',') like
CONCAT('%,', Users.phone, ',%')
WHERE Contacts.user_id = 1
这样做的目的是将联系人转换为
, <numbers> ,
,90123456789,90123456789,90123456789,90123456789,
注意:这种方法不能使用任何索引,因此在许多情况下会有很差的性能
排。如果按1k-10k的顺序排列,则行数可以。你需要考虑重构你的DB。 < P>你应该按照史提夫的建议将你的DB重构成标准化的格式。p>
但如果你不能:
SELECT *
FROM Users
JOIN Contacts
ON CONCAT(',', Contacts.contacts, ',') like
CONCAT('%,', Users.phone, ',%')
WHERE Contacts.user_id = 1
这样做的目的是将联系人转换为
, <numbers> ,
,90123456789,90123456789,90123456789,90123456789,
注意:这种方法不能使用任何索引,因此在许多情况下会有很差的性能
排。如果按1k-10k的顺序排列,则行数可以。超过你需要考虑重构你的DB。< /P>检查这里解释得很好-把表和数据作为文本检查,这里解释得很好-把表和数据作为文本感谢答辩,我们需要从“联系人”栏中删除“”(逗号)“联系人”表,对吗?那是我想要的。是的,绝对。例如,在您的联系人
列中的示例中,有“919444894154919446546”
,此时您应该有两行,而不是按照与我的示例中相同的模式。提供了一个示例,说明如何获取逗号分隔的列表并从中生成行。感谢您的回复,我们需要从“联系人”表的“联系人”列中删除“”(逗号),对吗?那是我想要的。是的,绝对。例如,在您的联系人
列中的示例中,有“919444894154919446546”
,此时您应该有两行,而不是按照与我的示例中相同的模式。提供一个示例,说明如何获取逗号分隔的列表并从中生成行。