php - 如何按最新帖子或评论(如果有)获取所有带评论顺序的帖子 - zend Framework 2 php mysql

标签 php mysql zend-framework zend-framework2

我想显示所有帖子的列表。 如果为特定帖子创建了新评论,则该帖子将出现在列表顶部。

这是我在模型中的函数:

   public function fetchAll($data) {

    $sql = new Sql($this->adapter);
    $where = new Where();
    $select = new Select();

    $this->table = "threads";

    $select->from($this->table);

    $select->join('thread_replies', 'thread_replies.thread_id = ' . $this->table . '.thread_id', array('modifiedReply' => "modified"), "left");

    $select->join(array('b' => 'buildings'), 'b.id = threads.building_id', array('building_name'));
    $select->join('user', 'user.user_id = threads.created_by', array('display_name', 'username'));

    if ($data['userLevel'] == 2) {
        $select->where($where->equalTo($this->table . '.building_id', $data['building_id']));
    }
    if (isset($data['building'])) {
        $select->where($where->equalTo($this->table . '.building_id', $data['building']));
    }
    if (isset($data['name'])) {
        $select->where($where->Like($this->table . '.name', $data['name'] . '%'));
    }
    $select->where($where->equalTo($this->table . '.status', '1'));

    $select->order('COALESCE(MAX(thread_replies.modified), threads.modified) DESC');


    $statement = $sql->prepareStatementForSqlObject($select);


//echo $select->getSqlString($this->adapter->getPlatform());

    $result = $statement->execute();

    $rows = new ResultSet();
    return $rows->initialize($result);
}

这是生成的sql:

SELECT `threads`.*, `thread_replies`.`modified` AS `modifiedReply`, `b`.`building_name` AS `building_name`, `user`.`display_name` AS `display_name`, `user`.`username` AS `username` FROM `threads` 
LEFT JOIN `thread_replies` ON `thread_replies`.`thread_id` = `threads`.`thread_id` 
INNER JOIN `buildings` AS `b` ON `b`.`id` = `threads`.`building_id` INNER JOIN `user` ON `user`.`user_id` = `threads`.`created_by` 
WHERE `threads`.`status` = '1' 
ORDER BY `COALESCE``(``MAX``(``thread_replies`.`modified``)` ASC, `threads`.`modified``)` DESC

我收到以下错误:

Statement could not be executed (42S22 - 1054 - Unknown column 'COALESCE`(`MAX`(`thread_replies.modified`)' in 'order clause')

注意:这个问题与https://stackoverflow.com/a/20028142/4380588非常相似。

最佳答案

您需要用表达式包装订单,这是因为 Zf2 尝试引用订单字符串中的所有标识符。 改变这个

$select->order('COALESCE(MAX(thread_replies.modified), threads.modified) DESC');

到此

$select->order(new \Zend\Db\Sql\Expression('COALESCE(MAX(thread_replies.modified), threads.modified) DESC'));

关于php - 如何按最新帖子或评论(如果有)获取所有带评论顺序的帖子 - zend Framework 2 php mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34065938/

相关文章:

php - Zend Framework, HelperBroker PHP单元测试

php - 检索域名而不是 IP

php - 使用 Zend Framework 检查每个页面上的自定义条件

php - 对不同值的实例求和并合计它们的价格

php - 使用 updateOrInsert() 方法批量插入/更新并将数组转换为字符串

MySQL 正则表达式搜索查询

javascript - 从多个文本框存储数据

php - 数据库值显示两次

php - 此类错误的错误页面-laravel 5

Mysql表存储年龄组范围