我有两张桌子,一张包含我网站贡献者的信息,另一张包含有关照片的信息。
对于网站的管理员方面,我想使用php和mysql创建一个表格,显示所有贡献者,但也计算每个贡献者可用于该网站的照片数量。
我使用此代码获取名称列表
SELECT *
FROM site_con
ORDER BY surn ASC
然后我设置了一个循环来列出所有名称,但在该循环中添加了一个查询来计算使用此代码的照片数量
$contributor = $row_rsContrib['con_Code'];
mysql_select_db($database_connGrowl, $connGrowl);
$query_rsCounter = "SELECT COUNT(*) AS Count
FROM site_phts
WHERE photter = $contributor";
$rsCounter = mysql_query($query_rsCounter, $connGrowl) or die(mysql_error());
$row_rsCounter = mysql_fetch_assoc($rsCounter);
$totalRows_rsCounter = mysql_num_rows($rsCounter);
唯一的问题是当'$ contributor'不在照片表中时,它会返回错误。
有什么想法吗?
答案 0 :(得分:1)
您可以获取贡献者列表&单个查询中的照片数量:
SELECT sc.*,
COALESCE(x.numPhotos, 0) AS numPht
FROM SITE_CON sc
LEFT JOIN (SELECT sp.photter,
COUNT(*) AS numPhotos
FROM SITE_PHTS sp
GROUP BY sp.photter) x ON x.photter = sc.con_code
ORDER BY ssc.surn
您的查询失败,因为摄影师不一定有贡献 - 上面的查询返回摄影师列表,没有相关照片的那些将具有零的numPht值。这是a primer on JOINs,以帮助解释正在使用的OUTER JOIN。
答案 1 :(得分:1)
实际上,最好的方法是使用MSQL来计算而不是PHP:
SELECT site_con.*, COUNT( photo_id )
FROM site_con
LEFT JOIN site_phts ON site_con.con_Code = site_phts.photter
GROUP BY site_con.con_Code
ORDER BY site_con.surn
LEFT JOIN
具有在右表(照片)中没有与贡献者行匹配的行时创建NULL条目的特殊属性。 COUNT
不会计算这些NULL条目。 (你需要在照片表中使用一些独特的列,我使用了photo_id。)
答案 2 :(得分:0)
这是贡献者和照片之间的关系:
贡献者&lt ;-( 0,n)------(0,1) - >照片
所以你可能想在这两个表之间添加一个连接,我的意思是你将con_id添加到照片表(作为一列)。
这样您就可以在一个SQL查询中检索所有信息。
(就像OMG小马刚刚说的那样)
答案 3 :(得分:0)
做这样的事情,我相信这应该有用:
$result = mysql_query("SELECT COUNT(*) AS Count FROM site_phts WHERE photter = '$contributor'"); // put the single quote if $contributor is a string value
//use mysql_fetch_array
if ($row = mysql_fetch_array($result, MYSQL_NUM)) {
printf("ID: %d", $row[0]);
}
希望这有效,祝你好运![/ p>