返回总行数的查询

时间:2014-08-03 14:36:23

标签: php mysql sql

我正在尝试找到一种方法将数据从数据库中返回并计算我选择的行。我尝试了一些我发现的东西,但是他们或者最终出现了错误,或者只是没有完全正常工作。

让我解释下面的代码。我从某个名为“posts”的表中获取数据,其中images表将连接到posts表。如果填写$ category参数以及$ start和$ limit参数,它会跳过else来选择仅具有特定类型的帖子。(type_bericht)。

function get($table, $category = null, $start = null, $limit = null, $conn) {
    if (!$category) {
        $query = $conn->query(
                  "SELECT $table.*, COUNT($table.id)
                   AS post_count, images.id AS imageid, images.url AS iurl
                   FROM $table
                   LEFT JOIN images ON images.id = $table.image_id
                   ORDER BY id DESC");
    } else {
        $query = $conn->query(
                   "SELECT $table.*, COUNT($table.id)
                    AS post_count, images.id AS imageid, images.url AS iurl
                    FROM $table
                    LEFT JOIN images ON images.id = $table.image_id    
                    WHERE type_bericht = '$category'
                    ORDER BY id  DESC LIMIT $start, $limit");

    }

    if ($query->rowCount() > 0) {
        return $query;
    } else {
        return false;
    }
}

此代码不显示任何错误,但不能完全正常工作。它计算并返回(数字)从数据库中选择的帖子,但它只显示表格中的一行。如果我删除“COUNT($ table.id)AS post_count”部分,它会再次显示所有帖子,但我不想要那样。有人理解我可能忘记或不做的事吗?

3 个答案:

答案 0 :(得分:0)

使用SELECT SQL_CALC_FOUND_ROWS $table.* ...(在每个SELECT之后直接添加“SQL_CALC_FOUND_ROWS”),然后使用$db->query("SELECT FOUND_ROWS();")来获取计数。

答案 1 :(得分:0)

无法删除sql语句的Count()部分,然后使用:

if (count($query) > 0) {
    return $query;
}
else {
    return false;
}

或者$ query不是数组吗?

答案 2 :(得分:0)

只要你COUNT(),它就会隐含地将所有内容组合在一起。

假设您使用MySQL,您可以使用SQL_CALC_FOUND_ROWS标志,如:

SELECT SQL_CALC_FOUND_ROWS FROM ...

让MySQL存储结果总数。然后,您可以通过之后立即执行第二个查询来检索该数字:

SELECT FOUND_ROWS() AS rowcount

,其行为类似于普通的选择查询。它将返回一行,其中一列名为rowcount,该列存储上一次查询中找到的行总数。