PHP MySQL сравнивает две таблицы и получает значения - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть две таблицы, одна называется контактами, а другая - номерами. Один хранит контактную информацию и выглядит так

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 ]

2 голосов
/ 02 апреля 2019

использовать объединение

select id ,fname ,lname ,email ,address , uid, uniqid,number
from contacts a
inner join numbers b on b.cid=a.uniqid
1 голос
/ 02 апреля 2019

Здесь мы используем понятие 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;
1 голос
/ 02 апреля 2019

Вы можете использовать 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
1 голос
/ 02 апреля 2019

Использование соединения - правильный выбор здесь:

  SELECT con.*,num.* from contacts as con inner join numbers as num on con.uniqid = num.cid
1 голос
/ 02 апреля 2019

Просто используйте внутреннее соединение с 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
1 голос
/ 02 апреля 2019

Вы можете сопоставить два идентификатора, чтобы убедиться, что они есть в качестве индекса таблицы, для более быстрого поиска данных.

SELECT id ,fname ,lname ,email ,address , uid, uniqid, number from contacts a, number b WHERE a.uniqid = b.cid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...