MySQL 从中介算起 table
MySQL count from intermediary table
我正在尝试在包含两个 ID 的中介 table 中找到最常用的类别,我 运行 这是为了查找类别中的所有帖子计数。
$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>';
}
这是 returns 所有类别,但我想将其限制为仅具有最多 p_id 的前四个类别。我尝试将计数查询限制为 4,但这没有用。
以下是 table:
帖子:p_id、p_name
p_categories: p_id, category_id
类别:category_id、category_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>';
}
我正在尝试在包含两个 ID 的中介 table 中找到最常用的类别,我 运行 这是为了查找类别中的所有帖子计数。
$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>';
}
这是 returns 所有类别,但我想将其限制为仅具有最多 p_id 的前四个类别。我尝试将计数查询限制为 4,但这没有用。
以下是 table:
帖子:p_id、p_name
p_categories: p_id, category_id
类别:category_id、category_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>';
}