MySQL服务器版本,用于在id附近使用正确的语法

时间:2017-02-04 06:07:27

标签: php mysql

MySQL数据库查询:

SELECT * 
FROM (SELECT * 
      FROM (`static_package_data`) 
          LEFT JOIN package_interest pi ON static_package_data.id=pi.package_details_id 
      WHERE `package_availability_type` = 'all' 
            AND `admin_status` = 'ACTIVE' 
            AND `status` = 'ACTIVE' 
            AND static_package_data.package_price BETWEEN 2000 AND 5000
            AND WHERE 'static_package_data.session_id'='AE44278818'
      GROUP BY static_package_data.id 
      UNION ALL 
      SELECT *
      FROM (`static_package_data`) 
          LEFT JOIN package_interest pi ON  static_package_data.id=pi.package_details_id 
      WHERE `package_availability_type` ='range' 
          AND `admin_status` = 'ACTIVE' 
          AND `status` = 'ACTIVE' 
          AND `to_date` >= '2017-02-04'AND static_package_data.package_price BETWEEN 2000 AND 5000 
          AND WHERE 'static_package_data.session_id'='AE44278818'
      GROUP BY static_package_data.id 
      ) as dt LIMIT 0 , 10

以下查询抛出下一个错误:

  

您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以便在WHERE'static_package_data.session_id'='AE44278818'GROUP BY static_package_data'附近使用正确的语法。在第1行

我在现有查询中添加了会话ID

3 个答案:

答案 0 :(得分:0)

你只需要一个" WHERE"之后的任何事情都应该是AND

2000 AND 5000 AND WHERE 'static_package_data.session_id'='AE4

应该是

2000 AND 5000 AND 'static_package_data.session_id'='AE4

答案 1 :(得分:0)

代码中还有两个WHERE子句以及其他语法错误,例如列名称周围的单引号而不是反引号。

SELECT 
    *
FROM
    (SELECT 
        *
    FROM
        `static_package_data`
    LEFT JOIN package_interest pi ON static_package_data.id = pi.package_details_id
    WHERE
        `package_availability_type` = 'all'
            AND `admin_status` = 'ACTIVE'
            AND `status` = 'ACTIVE'
            AND `static_package_data`.package_price BETWEEN 2000 AND 5000
            AND `static_package_data`.`session_id` = 'AE44278818'
    GROUP BY static_package_data.id UNION ALL SELECT 
        *
    FROM
        `static_package_data`
    LEFT JOIN package_interest pi ON static_package_data.id = pi.package_details_id
    WHERE
        `package_availability_type` = 'range'
            AND `admin_status` = 'ACTIVE'
            AND `status` = 'ACTIVE'
            AND `to_date` >= '2017-02-04'
            AND `static_package_data`.package_price BETWEEN 2000 AND 5000
            AND `static_package_data`.`session_id` = 'AE44278818'
    GROUP BY `static_package_data`.id) AS dt
-- Consider adding an order by clause here --
LIMIT 0 , 10

另外,考虑在使用limit时向查询添加order by子句,否则将获取任何10行。

答案 2 :(得分:0)

简单,

SELECT * 
FROM   ( 
                 SELECT    * 
                 FROM      (`static_package_data`) 
                 LEFT JOIN package_interest pi 
                 ON        static_package_data.id=pi.package_details_id 
                 WHERE     `package_availability_type` = 'all' 
                 AND       `admin_status` = 'ACTIVE' 
                 AND       `status` = 'ACTIVE' 
                 AND       static_package_data.package_price BETWEEN 2000 AND       5000 
                 AND 
                 WHERE     'static_package_data.session_id'='AE44278818' 
                 GROUP BY  static_package_data.id 
                 UNION ALL 
                 SELECT    * 
                 FROM      (`static_package_data`) 
                 LEFT JOIN package_interest pi 
                 ON        static_package_data.id=pi.package_details_id 
                 WHERE     `package_availability_type` ='range' 
                 AND       `admin_status` = 'ACTIVE' 
                 AND       `status` = 'ACTIVE' 
                 AND       `to_date` >= '2017-02-04' 
                 AND       static_package_data.package_price BETWEEN 2000 AND       5000 
                 AND 
                 WHERE     'static_package_data.session_id'='AE44278818' 
                 GROUP BY  static_package_data.id ) AS dt limit 0 , 
       10;