Как найти несколько таблиц MySQL, чтобы найти одну конкретную строку?

Обновить

December 2018

Просмотры

177 раз

3

У меня есть три таблицы: адаптеры, разъемы, компоненты
мне нужно , чтобы быть в состоянии найти их все , чтобы найти соответствующую часть номера (part_num)
Номер детали уникален , поэтому я не придется беспокоиться о нескольких записей.

Я использую GET, чтобы найти номер детали в URL, установите его в $ номер, а затем сделать ВЫБРАТЬ

То, что я нашел то, что я должен использовать UNION, однако три таблицы имеют разные столбцы, и это дает мне ошибку при попытке сделать выбор. В приведенном ниже примере

Использование UNION найти ссылки из других таблиц

Это мой код:

if(isset($_GET['num'])) {
$num = $_GET['num'];

$result = mysql_query("SELECT * FROM connectors WHERE part_num = '$num' UNION SELECT * FROM adapters WHERE part_num = '$num' UNION SELECT * FROM components WHERE part_num = '$num'"); }

Любая помощь будет оценена, поэтому заранее спасибо SO =)

3 ответы

0

Для того, чтобы использовать UNION, 3 наборов записей должны иметь одинаковое число столбцов, так что вы должны будете какие столбцы предписанными в технические задания из каждой таблицы , которую вы хотите. Оттуда, вы будете иметь единый набор результатов с данными каждого из 3 -х запросов.

GDP
2

Вы , вероятно , следует иметь четвертую таблицу , Partsкоторая определяет , к которому таблица типа каждый part_numбыл выделен. Тем не менее, без этого, вы можете все еще получить то , что вы после того, как с внешним соединением (расточительны , хотя):

SELECT * FROM
             connectors
   LEFT JOIN adapters   USING(part_num)
   LEFT JOIN components USING(part_num)
WHERE
   part_num = ?

Обратите внимание , что я использовал , ?как вы действительно должны использовать подготовленные заявления: если вы не знаете , почему, или то , что они, читать о Бобби таблицах .

1

Как насчет того, не все столбцы, но только заголовки или так далее?

$sSql = "SELECT id, title, 1 FROM connectors WHERE part_num = '$num' 
UNION 
SELECT id, title, 2 FROM adapters WHERE part_num = '$num' 
UNION 
SELECT id, title, 3 FROM components WHERE part_num = '$num'";

Вы должны принять его в ваши поля таблицы, но с этой логикой, вы будете иметь массив, где по третьему колонку (в моем примере), вы можете знать, если это разъем, адаптер или компонент найден, затем генерировать соответствующие ссылки или делать другие действия с этими данными.

Другой способ это сделать Мульти запрос, который будет возвращать несколько результатов, один запрос к базе данных. Есть несколько способов, чтобы использовать его - с помощью MySQLi (http://lt.php.net/manual/en/mysqli.multi-query.php) или некоторые из библиотек ADOdb или PDO.

Надеюсь, что это поможет.