我正在寻找一种更简洁的方法来执行此操作。我的代码有效,但我知道它可以更好。我有三个表:一个包含类别组列表,一个包含链接到类别组的类别列表,另一个包含链接到类别的新闻故事列表。
我需要遍历所有类别组的名称,然后是类别组中类别的名称,同时列出每个类别中的新闻报道数量。
我有三个表: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/