#php #mysql #join
#php #mysql #Присоединиться
Вопрос:
У меня есть таблица контактов со столбцами id, first, last и identification. Пытаюсь отобразить имена в большем объединении. Я не могу заставить его отображаться при объединении обоих столбцов.
Таблицы:
Идентификатор проверки Order_Id Inspector_Id
Идентификатор контактов First_Name Last_Name Инспектор заказа
Это мой ВЫБОР:
$sql = " SELECT
Inspections.Id,
Inspections.Orderer_Id,
Inspections.Inspector_Id,
Contacts.Id
Contacts.First_Name AS OFirst,
Contacts.Last_Name AS OLast,
Contacts.First_Name AS IFirst,
Contacts.Last_Name AS ILast,
FROM Inspections
JOIN Contacts ON Inspections.Orderer_Id amp;amp; Inspections.Inspector_Id=Contacts.Id
WHERE
Inspections.Id = " . $trigger . ";";
Это всего лишь последняя попытка. Я перепробовал множество способов их объединения, но, думаю, мне просто сложно перевести код, который я нашел во время поиска. Любая помощь была бы высоко оценена!
Комментарии:
1. Являются ли значения во всех трех столбцах одинаковыми? Вам нужно было бы указать два отдельных выражения. Как в
Inspections.orderer_id = Contacts.id AND inspections.inspector_id=contacts.id
. Но если это тот случай, который вы хотите, я бы предложил объединить только 1 и сравнитьInspections.orderer_id = Inspections.inspector_id
в предложении where.2. Ваше условие объединения имеет недопустимый синтаксис:
Inspections.Orderer_Id
это не логическое выражение, я полагаю, вы имели в видуInspections.Orderer_Id =Contacts.Id
. Такжеamp;amp;
недопустимый SQL, вам нужно использоватьAND
3. @jmoerdyk хотя
AND
является традиционным для SQL, mysql допускает выраженияamp;amp;
и||
в. руководство4. Извините, так долго работал с MSSQL, мой MySQL заржавел: P
5. Оба значения в Orderer_Id и Inspector_Id указывают на Contacts.Id.
Ответ №1:
Ваш текущий запрос будет работать только (после устранения синтаксических ошибок), если инспектор и Исполнитель заказа — одно и то же лицо, если это не так, вам придется дважды присоединиться к контактам, используя псевдонимы таблиц:
SELECT
Inspections.Id,
Inspections.Orderer_Id,
Inspections.Inspector_Id,
orderer.Id AS OId,
orderer.First_Name AS OFirst,
orderer.Last_Name AS OLast,
inspector.Id AS IId,
inspector.First_Name AS IFirst,
inspector.Last_Name AS ILast
FROM Inspections
JOIN Contacts AS orderer ON Inspections.Orderer_Id = orderer.Id
JOIN Contacts AS inspector ON Inspections.Inspector_Id = inspector.Id
WHERE Inspections.Id = xxxx
Комментарии:
1. Хорошо, я понимаю, к чему вы здесь клоните. Я попытался ввести напрямую, и ничего не вышло, но у меня есть вопрос. Как / где вы объявляете, что заказчик. Идентификатор на самом деле является контактами. Идентификатор? То же самое для инспектора. Я вижу, что это должны быть псевдонимы таблиц, но не уверен, как это установить. Я продолжу поиск в Интернете и поиграю с вашим примером. Спасибо за вашу постоянную помощь!
2. Неважно! Я пропустил добавление «,» после ILast. (У меня есть дополнительные варианты выбора после. Это сработало отлично. МИЛЛИОН БЛАГОДАРНОСТЕЙ! У меня недостаточно репутации, чтобы отметить как ответивший, но вы справились с этим.
3. В условии объединения вы устанавливаете псевдоним в запросе после имени таблицы. Я обновил запрос, чтобы сделать его более понятным, имя после
AS
задает псевдоним для таблицы передAS
. Большинство SQL-серверов позволяют вам опускатьAS
ключевое слово.