我的数据库中有两个表。
cat - catid,catname 文章 - id,catid,content所以我想要显示的是类别名称(catname)以及该类别中有多少篇文章。
这是我的代码,但它起作用了。
$query = "SELECT cat.cname, COUNT(articles.cat_id)".
"FROM cat, articles ".
"GROUP BY cat_id";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row['cname']. " - ". $row['COUNT(cat_id)'];
echo "<br />";
}
任何帮助都会得到最多的帮助。感谢。
答案 0 :(得分:3)
所以这是一个很多的关系。即1类 - &gt;很多文章。
执行此操作的最佳方法是创建第三个表,即邻接列表。
让'category_id'和'article_id'在表'cat'和'article'中保持唯一。
在第三个表格中,您可以定义1:多个关系。
Table 3: cat_articles
adj_id cat_id art_id
1 1 1
2 1 2
3 2 3
4 2 4
5 3 5
现在加入表格:
$sql = "SELECT * FROM `cat_articles` adj ".
"LEFT JOIN (`cat` cat, `articles` art)".
"ON (cat.cat_id = adj.cat_id AND art.art_id = adj.art_id) ";
这将采用邻接表,保留其格式(由于左连接)并将表article
和category
附加到其中,为您提供所有文章的分类表。您现在可以使用mysql_fetch_array()
来获得结果。
您可以像使用SQL函数COUNT
一样返回特定列的计数。
或者,使用PHP,运行查询,然后使用mysql_num_rows($result)
返回SQL在其缓冲区中的行数。
或者,使用mysql_fetch_array($result)
检索结果,并使用count
返回数组中配对值的数量。
答案 1 :(得分:1)
使用mysql_fetch_array:
$query = "SELECT cat.cname, COUNT(articles.cat_id)".
"FROM cat, articles ".
"GROUP BY cat_id";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
echo $row[0]. " - ". $row[1];
echo "<br />";
}
mysql_fetch_array返回一个数字索引数组(0,1,2,3,4,..)
答案 2 :(得分:1)
SELECT cat.cname, COUNT(articles.cat_id) artcount
FROM cat, articles WHERE c.cat_id = articles.cat_id
GROUP BY cat.cat_id
我猜你错过了join子句。除非您正确加入表格,否则您将创建“笛卡尔积”。
获取行“$ row ['cname']和$ row ['artcount']。