PHP:带有链接表的 MYSQL COUNT 查询

标签 php mysql

我正在寻找一种更简洁的方法来执行此操作。我的代码有效,但我知道它可以更好。我有三个表:一个包含类别组列表,一个包含链接到类别组的类别列表,另一个包含链接到类别的新闻故事列表。

我需要遍历所有类别组的名称,然后是类别组中类别的名称,同时列出每个类别中的新闻报道数量。

我有三个表:CategoryGroups、Categories、News。

我有一组查询。第一个查询 CategoryGroups 表中的所有行:

$result = mysql_query( '
SELECT cat_group_id, cat_group_name FROM CategoryGroups 
' );

第二个查询在第一个查询的循环结果中,查找所有具有新闻项并链接到特定类别组的类别:

<?php
while( $row = mysql_fetch_assoc( $result ) ){
    $id = $row['cat_group_id'];     
    $name = $row['cat_group_name'];

echo "<h3>$name</h3>";

    $sql =  mysql_query("
            SELECT  category_id, title FROM `Categories`  
            WHERE cat_group_id = $id 
            AND category_id IN 
            (SELECT news.category_id FROM news)
            "); 
    while( $row = mysql_fetch_assoc($sql) ) {
    $title = $row['title'];
    $catid = $row['category_id'];
    $numbers =  mysql_query("
                SELECT * FROM news 
                WHERE category_id =$catid"
                );
    $nums = mysql_num_rows($numbers);
    echo "$title ($nums)<br/>\n";
}
?>

考虑到效率,我想将其限制为一两个查询。我知道这是可以做到的,但是我的尝试还没有成功。

谢谢。

最佳答案

为什么不加入表格?

SELECT cat_group_name, title, count(newsid)
FROM CatagoryGroups
INNER JOIN Categories ON cat_group_id
INNER JOIN News ON category_id
GROUP BY cat_group_name, title

看起来它应该是关闭的,如果表 news 有一个 newsid 列(它必须有一些主键,对吗?好吧,数一数;-)。使用明显的索引,JOIN 应该非常快,并且您的 PHP 代码可以执行您可能需要的任何输出格式。

关于PHP:带有链接表的 MYSQL COUNT 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/813994/

相关文章:

php - 从数据数组编写循环sql查询(php,mysql)

javascript - 如何在生成的html的onclick函数中传递参数

php - MySQL使用PDO插入没有插入数据

mysql - 帮助这个查询它显示重复的记录并且它不起作用?

php - 日期未保存到数据库

php - 为什么我的 POST file_get_contents 返回 HTTP 错误请求?

php - 在 php 中为 html 表上的行添加删除按钮

java - 将 HTML 存储到 MySQL 数据库中

PHP 警告 : PHP Startup: Unable to load dynamic library '/usr/lib/php/20151012/msqli.so'

mysql - 四个相关表,PatientDetails、Symptoms、Medicine 和 Follow up