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、2 つのステートメント間の列が一致しません。

異なる列の MySql SELECT ユニオンを参照してください。

この場合、PDO オブジェクトを直接使用する方が問題が少ないかもしれません。

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