加入两个MySQL表并显示组合数据

时间:2011-11-12 11:15:38

标签: php mysql

我的数据库中有两个表。

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 />";
}

任何帮助都会得到最多的帮助。感谢。

3 个答案:

答案 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) ";

这将采用邻接表,保留其格式(由于左连接)并将表articlecategory附加到其中,为您提供所有文章的分类表。您现在可以使用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']。