php – 如何在Kohana的查询构建器中使用ORDER BY和GROUP BY构建UNION查询?
作者:互联网
我正在尝试使用Kohana’s query builder构建一个UNION查询.一切正常,直到我添加GROUP BY或ORDER BY子句.
这是我正在使用的代码(简化):
$query1 = DB::select('p.name')
->from(array('person', 'p'))
->where('p.organization', 'LIKE', 'foo%')
->limit(10);
$names = DB::select('sh.name')
->union($query1, FALSE)
->from(array('stakeholder', 'sh'))
->where('sh.organization', 'LIKE', 'foo%')
->group_by('name')
->order_by('name')
->limit(10)
->execute()
->as_array();
它不是在整个查询结束时添加GROUP BY和ORDER BY,而是在第二个查询之后立即添加它.
这是生成的SQL:
SELECT sh.name FROM stakeholder AS sh WHERE sh.organization LIKE 'foo%'
GROUP BY name ORDER BY name LIMIT 10
UNION
SELECT p.name from person AS p WHERE p.organization LIKE 'foo%' LIMIT 10;
我想要的是:
SELECT sh.name FROM stakeholder AS sh WHERE sh.organization LIKE 'foo%'
UNION
SELECT p.name from person AS p WHERE p.organization LIKE 'foo%'
GROUP BY name ORDER BY name LIMIT 10;
解决方法:
这里的子句是从union()方法中设置的第一个查询中应用的,所以只需反转你放置它们的位置:
$query1 = DB::select('p.name')
->from(array('person', 'p'))
->where('p.organization', 'LIKE', 'foo%')
->group_by('name')
->order_by('name')
->limit(10);
$names = DB::select('sh.name')
->union($query1, FALSE)
->from(array('stakeholder', 'sh'))
->where('sh.organization', 'LIKE', 'foo%')
->execute()
->as_array();
您还可以从$names中删除多余的 – > limit(10),因为它将被忽略并被$query1中的一个取代.
标签:php,mysql,kohana-3 来源: https://codeday.me/bug/20190531/1187872.html