我正在尝试找到一种方法将数据从数据库中返回并计算我选择的行。我尝试了一些我发现的东西,但是他们或者最终出现了错误,或者只是没有完全正常工作。
让我解释下面的代码。我从某个名为“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”部分,它会再次显示所有帖子,但我不想要那样。有人理解我可能忘记或不做的事吗?
答案 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
,该列存储上一次查询中找到的行总数。