PHP MySQL比较两个表并获取值

时间:2019-04-02 08:02:25

标签: mysql sql

我有两个表格,一个叫做联系人,另一个叫做数字。一个存储联系信息,看起来像这样

contacts
-------------------------------------------------------
| id | fname | lname | email | address | uid | uniqid |
-------------------------------------------------------

我的第二个表存储着属于特定联系人的电话号码,如下所示

numbers
---------------------
| id | number | cid |
---------------------

cid与联系人表上的uniqid相同,如何通过mysql获取第二行表上具有其编号的联系人行?

更新 更正正确答案

SELECT id ,fname ,lname ,email ,address , uid, uniqid,number
FROM contacts a
inner join (SELECT cid, GROUP_CONCAT(DISTINCT number SEPARATOR ',') number FROM numbers) b ON b.cid=a.uniqid

缺少DISTINCT

6 个答案:

答案 0 :(得分:2)

使用加入

select id ,fname ,lname ,email ,address , uid, uniqid,number
from contacts a
inner join numbers b on b.cid=a.uniqid

答案 1 :(得分:1)

您可以映射两个ID,以确保将其作为表索引,以便更快地检索数据。

TM_CCOEFF

答案 2 :(得分:1)

只需将内部联接与n.cid = c.uniqid一起使用

select c.id,c.fname,c.lname,c.email,c.address,c.uid,c.uniqid,n.number 
from contacts c 
inner join numbers n 
on n.cid = c.uniqid

答案 3 :(得分:1)

在这里使用连接是正确的选择:

  SELECT con.*,num.* from contacts as con inner join numbers as num on con.uniqid = num.cid

答案 4 :(得分:1)

您可以使用GROUP_CONCAT将多个数字排成一行,然后当您暗示联接时将不会重复。

select `id` ,`fname` ,`lname` ,`email` ,`address` , `uid`, `uniqid`,`number`
from `contacts` a
inner join (Select `cid`, GROUP_CONCAT(`number` seperator ',') `number` from `numbers`) b on b.cid=a.uniqid

答案 5 :(得分:1)

在这里,我们使用foreign key的概念。这里的cid是号码表上的联系人表的foreign key。我们必须将primary key表的contact与数字表的外键匹配。如果两者都匹配,则显示结果。

Select a.id, a.fname, a.lname, a.email, a.address, 
a.uid, a.uniqid,b.number from contact a, number b where a.id=b.id;