我正在尝试创建一个SQL查询,该查询将向我显示预订中一位用户选择的服务的价格。
因此,我想从表id_service
中选择chosen_services
列,其中id_reservation
对应于$_SESSION['idReservation']
,并获取这些服务的价格并最终计算总费用
这是我在mysql中的2个表: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
谢谢!
答案 0 :(得分:0)
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 = ?