Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4联合生成错误的SQL_Php_Mysql_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel 4联合生成错误的SQL

Php Laravel 4联合生成错误的SQL,php,mysql,laravel,laravel-4,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) -&

代码如下:

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


问题出在哪里?

MySQL联合希望所有语句中的列都相同。因为您要在
$f
中连接另一个表,所以这两条语句之间的列不匹配

在这种情况下,直接使用PDO对象可能不那么麻烦

$pdo = DB::connection()->getPdo();

发现您的查询存在另一个问题。您应根据以下条款重新安排您的第一批订单:

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

它在
union
之前由您生成
订单,MySQL不会接受。

我不这么认为,看看这两个查询,它们都是
select*from topics…
,没有其他列。想法不错,但
*
不是特定于表的。例如,
selecttopics.*
会限制列,但是现在编写查询时,它会从两个表中获取所有列。你说得对!刚刚测试了它,MySQL使用了两个表中的所有列。FirebirdSQL不会这么做/@安东尼奥·卡洛斯·里贝罗这绝对是一个令人沮丧的特征。出于类似的原因,我尽可能避免在查询中使用星号。