PHP MySQL сравнение двух таблиц и получение значений

#mysql #sql

#mysql #sql

Вопрос:

У меня есть две таблицы, одна называется contacts, а другая называется numbers. В одной хранится контактная информация и выглядит следующим образом

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

Моя вторая таблица, в которой хранятся телефонные номера, принадлежащие определенному контакту, выглядит следующим образом

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

Идентификатор cid совпадает с идентификатором uniqid в таблице contact, как я могу получить строку contact с ее номерами, которая находится во второй таблице, через 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
  

В нем отсутствовал ОТЧЕТЛИВЫЙ

Комментарии:

1. Покажите нам образцы данных для обеих таблиц, а также ожидаемый результат. Все в виде форматированного текста, а не изображений!

Ответ №1:

используйте join

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

Комментарии:

1. Привет, спасибо за помощь, но, к сожалению, это создает другую строку, если есть другое число с тем же идентификатором uniqid

Ответ №2:

Вы можете использовать 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. По какой-то причине не работает, я попытался использовать синтаксис с заглавной буквы. но ничего

2. не могли бы вы попробовать сейчас, я думаю, это потому, что number — это ключевое слово, поэтому заключите его и выполните.

Ответ №3:

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

 SELECT id ,fname ,lname ,email ,address , uid, uniqid, number from contacts a, number b WHERE a.uniqid = b.cid;
  

Комментарии:

1. Совет сегодняшнего дня: переключитесь на современный, явный JOIN синтаксис. Проще писать (без ошибок), легче читать (и поддерживать) и легче конвертировать во внешнее соединение, если это необходимо.

Ответ №4:

Просто используйте внутреннее соединение с 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
  

Ответ №5:

использование join здесь является правильным выбором:

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

Ответ №6:

Здесь мы используем концепцию foreign key . Вот cid это foreign key таблица контактов в таблице номеров. мы должны сопоставить primary key of contact table с внешним ключом number table. если обе совпадают, то отображается результат.

 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;