Я пытаюсь получить данные из нескольких сказок, используя LEFT OUTER JOIN, но я получаю фатальную ошибку.
Имена таблиц, полей, подключение к БД правильные.
$sql = "SELECT shipping_info.shipping_id, service1.service, package1.package_type, countries1.country AS fromCountry, countries2.country AS toCountry, countries3.country AS resiCountry, customer1.name,
FROM shipping_info
LEFT OUTER JOIN service_types AS service1 ON shipping_info.service_type = service_types.serviceType_id
LEFT OUTER JOIN package_types AS package1 ON shipping_info.package_type = package_types.packageType_id
LEFT OUTER JOIN customer_info AS customer1 ON shipping_info.customer_id = customer_info.customer_id
LEFT OUTER JOIN countries AS countries1 ON shipping_info.from_loc = countries1.country_id
LEFT OUTER JOIN countries AS countries2 ON shipping_info.to_loc= countries2.country_id
LEFT OUTER JOIN countries AS countries3 ON shipping_info.to_id = countries3.country_id
ORDER BY shipping_info.order_date DESC";
Фатальная ошибка: Вызов функции-члена fetchAll () для необъекта в ….
попробуйте изменить свой запрос на это:
SELECT s1.shipping_id,
s1.service,
p1.package_type,
c1.country fromCountry,
c2.country toCountry,
c3.country resiCountry,
c1.name
FROM shipping_info si
LEFT JOIN service_types s1 ON si.service_type = s1.serviceType_id
LEFT JOIN package_types p1 ON si.package_type = p1.packageType_id
LEFT JOIN customer_info c1 ON si.customer_id = c1.customer_id
LEFT JOIN countries c1 ON si.from_loc = c1.country_id
LEFT JOIN countries c2 ON si.to_loc= c2.country_id
LEFT JOIN countries c3 ON si.to_id = c3.country_id
ORDER BY si.order_date DESC;
у вас было несколько опечаток в самом запросе с неправильным синтаксисом .. также LEFT OUTER JOIN и LEFT JOIN абсолютно одинаковы
Также можете ли вы опубликовать, как вы выполняете этот запрос? у вас может быть проблема с фактическим методом его выполнения.
Я не эксперт по MySQL, но это выглядит неправильно. Рассмотрим ваше первое присоединение:
LEFT OUTER JOIN service_types AS service1
ON shipping_info.service_type = service_types.serviceType_id
Вы присваиваете таблице service_types псевдоним (корреляционное имя) service1, но затем не используете его в ON-части соединения. Первое, что я хотел бы попробовать, это либо избавиться от имени корреляции:
LEFT OUTER JOIN service_types
ON shipping_info.service_type = service_types.serviceType_id
…или используйте это:
LEFT OUTER JOIN service_types AS service1
ON shipping_info.service_type = service1.serviceType_id
Поскольку вы используете его в именах столбцов, которые вы на самом деле выбираете, я бы использовал его в ON-части соединения. В любом случае повторите с package_types и customer_info, а затем попробуйте.
Сразу же я вижу, что у вас есть лишняя запятая перед предложением FROM. Это может привести к ошибке и к ошибке, которую вы получаете, как если бы вы запускали fetchAll для необъектного объекта, то есть запроса, который не был правильно отформатирован.
Ваши псевдонимы таблиц довольно длинные, так что вы можете либо сократить их, либо вообще отказаться от них и просто использовать полное имя таблицы.
SELECT
si.shipping_id,
st.service,
pt.package_type,
c1.country AS fromCountry,
c2.country AS toCountry,
c3.country AS resiCountry,
ci.name
FROM shipping_info si
LEFT JOIN service_types st
ON si.service_type = st.serviceType_id
LEFT JOIN package_types pt
ON si.package_type = pt.packageType_id
LEFT JOIN customer_info ci
ON si.customer_id = ci.customer_id
LEFT JOIN countries c1
ON si.from_loc = c1.country_id
LEFT JOIN countries c2
ON si.to_loc= c2.country_id
LEFT JOIN countries c3
ON si.to_id = c3.country_id
ORDER BY si.order_date DESC;
Кроме того, я недавно перешел на использование MySQL Workbench. Это определенно стоит проверить. Мне нравится это лучше, чем PHPMyAdmin. Это лучший рабочий процесс для меня, и в нем есть классные инструменты, такие как инструмент для обратного инжиниринга, который создаст для вас ERD на основе ваших таблиц. Он отлично подходит для тестирования ваших запросов перед их использованием в коде PHP.
MySQL Workbench
http://www.mysql.com/products/workbench/