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]:一般错误:1221UNION和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不会这么做/@安东尼奥·卡洛斯·里贝罗这绝对是一个令人沮丧的特征。出于类似的原因,我尽可能避免在查询中使用星号。