【问题标题】:Why is my left join not working in my php mysql database?为什么我的左连接在我的 php mysql 数据库中不起作用?
【发布时间】:2019-03-31 00:22:42
【问题描述】:

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

所以我想从表chosen_services 中选择id_service 列,其中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

提前致谢!

【问题讨论】:

  • 请将错误信息翻译成英文,并将信息和示例数据直接添加到您的帖子正文中,而不是image

标签: php mysql sql phpmyadmin


【解决方案1】:

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 = ?

注意:请注意WHERE 子句中的id_reservation 列也没有前缀。虽然这不会产生相同的错误(因为该列仅存在于两个表之一中),但当涉及多个表时,总是 为列添加前缀是一种很好的做法。另一个好习惯是使用表别名。

因此,这是您查询的新版本:

SELECT cs.id_service 
FROM chosen_services cs
LEFT JOIN services s ON cs.id_chosen_service = s.id_service 
WHERE cs.id_reservation = ?

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2021-02-15
    • 2020-12-14
    • 1970-01-01
    相关资源
    最近更新 更多