Php 中间表中的MySQL计数

Php 中间表中的MySQL计数,php,mysql,count,Php,Mysql,Count,我试图在一个包含两个ID的中间表中找到最常用的类别,我运行这个来查找所有针对类别的帖子计数 $data = $conn->query('SELECT * FROM category WHERE category_name ORDER BY category_name'); foreach($data as $row) { $sql = "SELECT COUNT(p_id) FROM p_categories c,category ca WHERE c.category_id = ca

我试图在一个包含两个ID的中间表中找到最常用的类别,我运行这个来查找所有针对类别的帖子计数

$data = $conn->query('SELECT * FROM category WHERE category_name ORDER BY category_name');

foreach($data as $row) {

$sql = "SELECT COUNT(p_id) FROM p_categories c,category ca WHERE c.category_id = ca.category_id AND category_name = :category_name";
$q = $conn->prepare($sql);
$q->execute(array(':category_name' => $row['category_name']));
$catco = $q->fetch();

echo '<p>'.$row['category_name'].' ('.$catco[0].')</p>';
}
$data=$conn->query('SELECT*FROM category,其中category\u name按category\u name排序);
foreach($行数据){
$sql=“从p_类别c、类别ca中选择计数(p_id),其中c.category_id=ca.category_id和category_name=:category_name”;
$q=$conn->prepare($sql);
$q->execute(数组(':category\u name'=>$row['category\u name']);
$catco=$q->fetch();
回显“”.$row['category_name']”(“.$catco[0]”)

”; }
这将返回所有类别,但我想将其限制为具有最多p_id的前四个类别。我尝试将计数查询限制为4,但没有成功

以下是表格:

职位:p_id,p_名称

p_类别:p_id,类别_id


category:category\u id、category\u name

您可以在单个查询中完成此操作

$sql = "SELECT p_categories.category_id, COUNT(*) AS cnt, category.category_name
        FROM p_categories 
        LEFT JOIN category
        ON p_categories.category_id = category.id 
        GROUP BY `category_id` 
        ORDER BY cnt 
        DESC LIMIT 4"

$data = $conn->query($sql); 
foreach($data as $row) {
    echo '<p>'.$row['category_name'].' ('.$row['cnt'] .')</p>';
}
$sql=“选择p_categories.category_id,计数(*)作为cnt,category.category_名称
来自p_类别
左连接类别
在p_categories.category_id=category.id上
按“类别\标识”分组
按cnt订购
描述限值4“
$data=$conn->query($sql);
foreach($行数据){
回显“”.$row['category_name'..”(“.$row['cnt'.])

”; }
@abunoh太好了,很高兴我能帮上忙