以下是代码:
$f = DB::table("topics")
->join("recommends", "topics.id", "=", "recommends.courseid")
->where("recommends.re_type", "=", $re_type)
->where("recommends.re_location", "=", $re_location)
->orderBy("recommends.weigh", "desc");
$s = DB::table("topics")
->orderBy("topics.create_time", "desc");
$f->union($s)->get();
我在关键字union
周围找错了SQL:
select * from `topics` inner join `recommends`
on `topics`.`id` = `recommends`.`courseid`
where `recommends`.`re_type` = ?
and `recommends`.`re_location` = ?
order by `recommends`.`weigh` desc
union //here!!!!!
select * from `topics` order by `topics`.`create_time` desc
错误信息:
SQLSTATE [HY000]:一般错误:1221
UNION和ORDER BY的使用不正确(SQL:...)
(绑定:数组(0 => 3,1 => 7,))
有什么问题?
答案 0 :(得分:0)
MySQL UNION期望在所有语句中使用相同的列。因为您要加入$f
中的另一个表,所以两个语句之间的列不匹配。
请参阅MySql SELECT union for different columns?
在这种情况下,直接使用PDO对象可能不那么令人头疼。
$pdo = DB::connection()->getPdo();
答案 1 :(得分:0)
发现了查询的另一个问题。您应该按照子句重新定位您的第一个订单:
->orderBy("recommends.weigh", "desc");
它在order by
之前生成union
,MySQL不会接受它。