我有两张桌子:
事件(id,incident_description) 评论(id,incident_id,comment_description)
我想编写这样的SQL表达式:
SELECT incident.*, COUNT(comment.id) AS com
FROM incident
LEFT JOIN comment ON comment.incident_id=incident.id
GROUP BY incident.id
ORDER BY com DESC
它在phpmyadmin中运行良好。
我在ORM中写道:
ORM::factory('incident')
->select('incident.*',array('COUNT("comment.id")', 'com'))
->join('comment', 'LEFT')
->on('comment.incident_id', '=', 'incident.id')
->group_by('incident.id')
->order_by('com', 'DESC')
->find_all();
但是我收到了一个错误: system / libraries / Database.php [296]: * trim()期望参数1为字符串,给定数组 *
来自Database.php的代码:
foreach ($sql as $val)
{
if (($val = trim($val)) === '') continue;
if (strpos($val, '(') === FALSE AND $val !== '*')
{
if (preg_match('/^DISTINCT\s++(.+)$/i', $val, $matches))
{
$val = $this->config['table_prefix'].$matches[1];
$this->distinct = TRUE;
}
else
{
$val = (strpos($val, '.') !== FALSE) ? $this->config['table_prefix'].$val : $val;
}
$val = $this->driver->escape_column($val);
}
$this->select[] = $val;
}
答案 0 :(得分:4)
array(DB::expr('COUNT("comment.id")'), 'com')
您不希望查询生成器尝试转义复杂表达式或其他数据库函数。在这些情况下,您需要使用使用DB::expr创建的数据库表达式。
答案 1 :(得分:-1)
对于Kohana 2你想要这样的东西
ORM::factory('incident')
->select('incident.*','COUNT("comment.id") AS comments')
->join('comment', 'comment.incident_id', 'incident.id', 'LEFT')
->groupby('incident.id')
->orderby('comments', 'DESC')
->find_all();
或使用数据库查询
DB::instance()->query('SELECT incident.*, COUNT(comment.id) AS comments
FROM incident
LEFT JOIN comment ON comment.incident_id = incident.id
GROUP BY incident.id
ORDER BY comments DESC');