0

这是代码:

    $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();

我在关键字周围得到了错误的 SQL union

    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、))

问题是什么?

4

2 回答 2

0

发现您的查询存在另一个问题。您应该重新定位您的第一个 order by 子句:

->orderBy("recommends.weigh", "desc");

它以前生产的是order by你,union而 MySQL 不会接受。

于 2013-10-02T18:13:43.287 回答
0

MySQL UNION 期望所有语句中的列相同。因为您要在 中加入另一个表$f,所以两个语句之间的列不匹配。

查看不同列的 MySql SELECT union?

在这种情况下,直接使用 PDO 对象可能不会那么令人头疼。

$pdo = DB::connection()->getPdo();
于 2013-10-02T17:52:45.153 回答