php - 使用 PHP 和 MySQL 连接多个表时出现 SQL 错误

标签 php mysql

尝试在 PHP 和 MySQL 中使用不同条件连接多个表时出现以下错误。

Incorrect usage of UNION and ORDER BY

这是我的查询:

select
   b.member_id,
   b.rest_name,
   b.city,
   b.proviance,
   b.postal,
   b.address,
   b.country,
   b.person,
   b.mobile,
   b.url,
   b.status,
   b.premium,
   b.image,
   b.business_phone_no,
   b.email,
   b.multiple_image,
   b.latitude,
   b.longitude,
   b.quadrant,
   d.member_id,
   d.day_id,
   d.cat_id,
   d.subcat_id,
   d.comment,
   d.city,
   d.special_images,
   c.cat_id,
   c.special,
   sub.subcat_id,
   sub.subcat_name,
   sub.status,
   sl.day_id,
   sl.member_id,
   sl.date_from,
   sl.date_to 
from
   db_restaurant_basic as b 
   left join
      db_restaurant_detail as d 
      on b.member_id = d.member_id 
   left join
      db_category as c 
      on d.cat_id = c.cat_id 
   left join
      db_subcategory as sub 
      on d.subcat_id = sub.subcat_id 
   left join
      db_special_images as sl 
      on d.day_id = sl.day_id 
      and d.member_id = sl.member_id 
where
   b.city = '2' 
   and d.day_id = '3' 
   and c.special = '2' 
   and sl.date_from <= '2016-10-26' 
   and sl.date_to >= '2016-10-26' 
   and b.status = 1 
   and sub.status = 1 
   and sl.date_from != '' 
   and sl.date_to != '' 
ORDER BY
   b.member_id DESC 
UNION ALL
SELECT
   b.member_id,
   b.rest_name,
   b.city,
   b.proviance,
   b.postal,
   b.address,
   b.country,
   b.person,
   b.mobile,
   b.url,
   b.status,
   b.premium,
   b.image,
   b.business_phone_no,
   b.email,
   b.multiple_image,
   b.latitude,
   b.longitude,
   b.quadrant,
   d.member_id,
   d.day_id,
   d.cat_id,
   d.subcat_id,
   d.comment,
   d.city,
   d.special_images,
   c.cat_id,
   c.special,
   sub.subcat_id,
   sub.subcat_name,
   sub.status,
   sl.day_id,
   sl.member_id,
   sl.date_from,
   sl.date_to 
from
   db_restaurant_basic as b 
   left join
      db_restaurant_detail as d 
      on b.member_id = d.member_id 
   left join
      db_category as c 
      on d.cat_id = c.cat_id 
   left join
      db_subcategory as sub 
      on d.subcat_id = sub.subcat_id 
   left join
      db_special_images as sl 
      on d.day_id = sl.day_id 
      and d.member_id = sl.member_id 
where
   b.city = '2' 
   and d.day_id = '3' 
   and c.special = '2' 
   and b.status = 1 
   and sub.status = 1 
   and sl.date_from = '' 
   and sl.date_to = '' 
ORDER BY
   b.member_id DESC

我该如何解决这个错误?

最佳答案

你应该只在查询的末尾分配顺序,而不是在每个选择中
并为不同表中具有相同名称的列使用适当的别名

select 
     b.member_id as b_member_id
    ,b.rest_name
    ,b.city
    ,b.proviance
    ,b.postal
    ,b.address
    ,b.country
    ,b.person
    ,b.mobile
    ,b.url
    ,b.status
    ,b.premium
    ,b.image
    ,b.business_phone_no
    ,b.email
    ,b.multiple_image
    ,b.latitude
    ,b.longitude
    ,b.quadrant
    ,d.member_id as d_member_id
    ,d.day_id
    ,d.cat_id
    ,d.subcat_id
    ,d.comment
    ,d.city
    ,d.special_images
    ,c.cat_id
    ,c.special
    ,sub.subcat_id
    ,sub.subcat_name
    ,sub.status
    ,sl.day_id
    ,sl.member_id
    ,sl.date_from
    ,sl.date_to 
from db_restaurant_basic as b 
left join db_restaurant_detail as d on b.b_member_id=d.d_member_id 
left join db_category as c on d.cat_id=c.cat_id 
left join db_subcategory as sub on d.subcat_id=sub.subcat_id 
left join db_special_images as sl on d.day_id=sl.day_id and d.member_id=sl.member_id 
where b.city='2' 
  and d.day_id='3' 
  and c.special='2' 
  and sl.date_from <='2016-10-26' 
  and sl.date_to >= '2016-10-26' 
  and b.status=1 
  and sub.status=1 
  and sl.date_from !='' 
  and sl.date_to !='' 

UNION ALL 

SELECT 
     b.member_id
    ,b.rest_name
    ,b.city
    ,b.proviance
    ,b.postal
    ,b.address
    ,b.country
    ,b.person
    ,b.mobile
    ,b.url
    ,b.status
    ,b.premium
    ,b.image
    ,b.business_phone_no
    ,b.email
    ,b.multiple_image
    ,b.latitude
    ,b.longitude
    ,b.quadrant
    ,d.member_id
    ,d.day_id
    ,d.cat_id
    ,d.subcat_id
    ,d.comment
    ,d.city
    ,d.special_images
    ,c.cat_id
    ,c.special
    ,sub.subcat_id
    ,sub.subcat_name
    ,sub.status
    ,sl.day_id
    ,sl.member_id
    ,sl.date_from
    ,sl.date_to 
from db_restaurant_basic as b 
left join db_restaurant_detail as d on b.member_id=d.member_id 
left join db_category as c on d.cat_id=c.cat_id 
left join db_subcategory as sub on d.subcat_id=sub.subcat_id 
left join db_special_images as sl on d.day_id=sl.day_id and d.member_id=sl.member_id 
where b.city='2' 
  and d.day_id='3' 
  and c.special='2' 
  and b.status=1 
  and sub.status=1 a
  nd sl.date_from ='' 
  and sl.date_to ='' 
ORDER BY b_member_id DESC

关于php - 使用 PHP 和 MySQL 连接多个表时出现 SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191561/

相关文章:

php - 我可以在 select 语句中使用两个Where吗

php - 如何使用 php 将包含印地语文本的表导出到 Excel 中?

php - 为什么 timezone_name_from_abbr 返回空字符串?

php - mysqli_fetch_assoc()需要参数/调用成员函数bind_param()错误。如何获取并修复实际的mysql错误?

php - 在 codeigniter 中检查电子邮件

java - 如何使用 context.xml 正确连接到 XAMPP mySQL DB

mysql - 根据同一张表获取 3 列左连接

java - 从mysql行中获取数据并通过Java中的ResultSet分别显示

mysql - 是否有数据库级别的软删除机制

php - 如何在不连接数据库的情况下创建 MySQL 准备语句字符串