Почему мое левое соединение не работает в моей базе данных php mysql? - PullRequest
1 голос
/ 31 марта 2019

Я пытаюсь создать SQL-запрос, который покажет мне цены услуг, выбранных одним пользователем в резервировании.

Поэтому я хочу выбрать столбец id_service из моей таблицы chosen_services где id_reservation coresponds к $_SESSION['idReservation'] и получить цену этих услуг и, наконец, рассчитать общую сумму.

вот мои 2 таблицы в MySQL: https://ibb.co/NtgLLh7 и https://ibb.co/jkB0Qm6

Вот мой запрос на данный момент:

$getPriceOfAllServices = $bdd->prepare(
    'SELECT id_service 
    FROM CHOSEN_SERVICES 
    LEFT JOIN SERVICES ON CHOSEN_SERVICES.id_chosen_service = SERVICES.id_service 
    WHERE id_reservation = ?'
);
$getPriceOfAllServices->execute(array($_SESSION['idReservation']));
$getPriceOfAllServices = $getPriceOfAllServices->fetch();

И у меня есть эта ошибка: https://ibb.co/Wc1hLvz

Заранее спасибо!

1 Ответ

0 голосов
/ 31 марта 2019

SELECT id_service

Обе таблицы, участвующие в запросе, имеют столбец с именем id_service.Поскольку вы не указали префикс имени столбца, MySQL не может достоверно определить, какое из двух значений вы имеете в виду, поэтому возникает ошибка «неоднозначное имя столбца».

Поскольку вы используете LEFT JOIN, весьма вероятно, чтовы хотите вернуть столбец из таблицы CHOSEN_SERVICES (поскольку другой столбец может быть NULL, если условие соединения не совпадает).

Обратите внимание:

SELECT CHOSEN_SERVICES.id_service 
FROM CHOSEN_SERVICES 
LEFT JOIN SERVICES ON CHOSEN_SERVICES.id_chosen_service = SERVICES.id_service 
WHERE id_reservation = ?

Примечание: обратите внимание, что столбец id_reservation в предложении WHERE не является префиксом.Хотя это не приведет к возникновению одной и той же ошибки (поскольку этот столбец существует только в одной из двух таблиц), рекомендуется использовать префиксы всегда с префиксами, когда задействованы несколько таблиц.Еще одна полезная привычка - использовать псевдонимы таблиц.

Соответственно, вот новая версия вашего запроса:

SELECT cs.id_service 
FROM chosen_services cs
LEFT JOIN services s ON cs.id_chosen_service = s.id_service 
WHERE cs.id_reservation = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...