Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 根据计数(*)获取帖子计数_Php - Fatal编程技术网

Php 根据计数(*)获取帖子计数

Php 根据计数(*)获取帖子计数,php,Php,我正在努力获取我拥有的帖子数量 这是我的问题 $Query=" SELECT t.*,u.*,c.* FROM posts as t LEFT JOIN relations as r on r.post_id = t.post_id LEFT JOIN users as u on t.auther_id = u.auther_id LEFT JOIN categories as c on c.cate_id = r.cate_id GRO

我正在努力获取我拥有的帖子数量

这是我的问题

$Query="
    SELECT t.*,u.*,c.*
    FROM posts as t
    LEFT JOIN relations as r on r.post_id = t.post_id
    LEFT JOIN users as u on t.auther_id = u.auther_id
    LEFT JOIN categories as c on c.cate_id = r.cate_id
    GROUP BY t.post_id
";

    $Query=mysql_query($Query);
    $numberOfPosts=mysql_num_rows($Query);
这个查询非常有效

但我正在尝试转换它,我想让它更快

我想使用
count(*)
而不是
t.*

因为当我使用t.*时,它会获得帖子和类别的完整数据

但我只想获得count,所以我决定使用
count(*)
,但我不知道如何将其用于这样的查询

编辑 我已将SELECT
t.*、u.*、c.*
替换为SELECT
count(t.*)

但是我得到了mysql错误
警告:mysql\u fetch\u assoc():提供的参数

编辑2: 我正在尝试选择计数(t.post\u title)

我得到了这个结果

Array ( [count(t.post_id)] => 10 ) 
但是我只有两个帖子

尝试这样做:

  $Query="
  SELECT count(t.*) as count_all
  FROM posts as t
  LEFT JOIN relations as r on r.post_id = t.post_id
  LEFT JOIN users as u on t.auther_id = u.auther_id
  LEFT JOIN categories as c on c.cate_id = r.cate_id
  GROUP BY t.post_id
  ";

$Query=mysql_query($Query);
$numberOfPosts=mysql_num_rows($Query);
你想做什么

选择count(t.id)作为……的计数

//do query with PDO or whatever you are using

$rows = mysql_fetch_assoc();
$num_rows = $rows['count'];

您可能只需要使用

SELECT count(*) as postingcount FROM posts
为什么?

因为没有WHERE子句,所以没有限制。您的联接不会向结果集中添加更多的行,并且最终您的GROUP BY会将由于重新联接到一行而可能发生的post_id的每一次重复合并。结果应该只进行计数,因此假设您想要知道的实数是表POST中的数据集数,您不需要任何联接,而在MySQL中对表执行count(*)操作确实是一个非常快速的操作

请记住检查mysql\u查询是否返回false,因为接下来必须检查mysql\u error()并查看查询出错的原因

$Query="
    SELECT t.*,u.*,c.*
    FROM posts as t
    LEFT JOIN relations as r on r.post_id = t.post_id
    LEFT JOIN users as u on t.auther_id = u.auther_id
    LEFT JOIN categories as c on c.cate_id = r.cate_id
    GROUP BY t.post_id
";

    $Query=mysql_query($Query);
    $numberOfPosts=mysql_num_rows($Query);
让我们退一步,分析一下这个查询

您正在从查询中使用的四个表中的三个表中选择所有内容。连接创建了一些逻辑,将您选择的内容限制为适当的类别、作者等。在一天结束时,您将从数据库中获取大量数据,然后在PHP中简单地询问返回了多少行(
mysql\u num\u rows
)。相反,@Dagon试图在评论中提出的建议是,让MySQL简单地计算结果,然后返回结果

让我们重构您的查询:

$query = "
    SELECT COUNT(t.post_id) AS qty
    FROM posts as t
        LEFT JOIN relations AS r ON r.post_id = t.post_id
        LEFT JOIN users AS u ON t.auther_id = u.auther_id
        LEFT JOIN categories AS c ON c.cate_id = r.cate_id
        GROUP BY t.post_id
";

    $result = mysql_query($query);
    $result_row = mysql_fetch_assoc($result);
    $numberOfPosts = $result_row['qty'];
(您还可以使用以使其更具可读性。)


我需要查看您的表结构,以便在如何优化查询和获得所需结果方面提供更多帮助。

如果您只需要计数,则不需要选择的其余部分,但您确实需要join$numberOfPosts will=1我得到10!我只有两个帖子!!可能是添加了类别和关系?我无法说明您的表结构,但如果您执行
Select*
操作,您将自己看到返回了多少行。我只是告诉你如何计算ID。是的,没有条件,它工作得很好,但是在我附加了条件之后,我得到了不同的结果!