为什么我的左联接在我的php mysql数据库中不起作用?

时间:2019-03-31 00:22:42

标签: php mysql sql phpmyadmin

我正在尝试创建一个SQL查询,该查询将向我显示预订中一位用户选择的服务的价格。

因此,我想从表id_service中选择chosen_services列,其中id_reservation对应于$_SESSION['idReservation'],并获取这些服务的价格并最终计算总费用

这是我在mysql中的2个表:https://ibb.co/NtgLLh7https://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 :(得分: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 = ?