Laravel 4 union生成错误的SQL

时间:2013-09-28 16:30:38

标签: php mysql laravel laravel-4

以下是代码:

    $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,))

有什么问题?

2 个答案:

答案 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不会接受它。