Dar*_*ein 4 php mysql kohana-3
我正在尝试使用Kohana的查询构建器构建 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();
Run Code Online (Sandbox Code Playgroud)
它不是在整个查询结束时添加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;
Run Code Online (Sandbox Code Playgroud)
我想要的是:
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;
Run Code Online (Sandbox Code Playgroud)
这里的子句是从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();
Run Code Online (Sandbox Code Playgroud)
您也可以删除多余的->limit(10),$names因为它将被忽略并被其中的一个取代$query1.
| 归档时间: |
|
| 查看次数: |
3594 次 |
| 最近记录: |