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(*)
,但我不知道如何将其用于这样的查询
编辑
我已将SELECTt.*、u.*、c.*
替换为SELECTcount(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。是的,没有条件,它工作得很好,但是在我附加了条件之后,我得到了不同的结果!