【问题标题】:You have an error in your SQL syntax; check the manual您的 SQL 语法有错误;检查手册
【发布时间】:2013-12-31 10:56:04
【问题描述】:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 4 行的“WHERE j.id_customer = 1”附近使用正确的语法

SELECT j.`id_customer`, j.`id_order`, m.`id_shop`
        FROM `ps_orders` j     
        LEFT JOIN `ps_order_detail` m   
        WHERE j.`id_customer` = 1

这是从prestashop php中的原始代码生成的,如果打开了详细的纠错功能-------

 foreach ($result as $key)
        {
                        $customer_id_is = 1;
             $product_id_is = 5;
                    $result2 = Db::getInstance()->executeS(
        'SELECT j.`id_customer`, j.`id_order`, m.`id_shop`
        FROM `'._DB_PREFIX_.'orders` j     
        LEFT JOIN `'._DB_PREFIX_.'order_detail` m   
        WHERE j.`id_customer` = '.$customer_id_is.'


          ');  

        }

【问题讨论】:

    标签: php mysql sql


    【解决方案1】:

    您的JOIN 中缺少 ON 子句

    SELECT j.id_customer, j.id_order, m.id_shop FROM ps_orders j
    LEFT JOIN ps_order_detail m
        ON m.SomeField = j.SomeField <-- HERE 
    WHERE j.id_customer = 1
    

    如果您要加入表格,则需要在字段上链接它们。否则,您正在执行交叉连接。

    MySQL 文档状态:

    在 MySQL 中,JOIN、CROSS JOIN 和 INNER JOIN 是语法等价物(它们可以相互替换)。在标准 SQL 中,它们是不等价的。 INNER JOIN 与 ON 子句一起使用,否则使用 CROSS JOIN。

    这样就可以了:

    SELECT j.id_customer, j.id_order, m.id_shop FROM ps_orders j
    JOIN ps_order_detail m
    WHERE j.id_customer = 1
    

    就像这样:

    SELECT j.id_customer, j.id_order, m.id_shop FROM ps_orders j
    INNER JOIN ps_order_detail m
    WHERE j.id_customer = 1
    

    但它不适用于 OUTER JOIN。

    【讨论】:

      【解决方案2】:

      当您链接两个表时,您必须在连接它们的每个表上定义一个列。

      您在未指定的JOINON 条件下执行此操作。示例:

      SELECT *
      FROM table1 
      LEFT JOIN table2 ON table1.pk_id = table2.fk_id
      

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-25
        相关资源
        最近更新 更多