我对SQL查询有很多了解。
我正在尝试制作图库,我需要从表格“cat_photos”中选择类别,其中包含行(ID,名称,封面,照片)和表格“照片”中包含行(ID)的照片数量,拇指,照片,类别)。
以下是我使用的代码:
1)选择类别
$query = mysql_query("SELECT * FROM cat_photos ORDER BY ID DESC");
while($data = mysql_fetch_array($query)) {
echo "<li><a href='photos.php?cat=$data[id]'><img src='galleries/categories/$row[image]' alt='$row[name]' /></a>
<div class='photodesc'><div class='catname'><a href='photos.php?cat=$row[id]'>$row[name]</a></div>
<div class='catcount'>Number of photos in category</div></div></li>"; }
2)计算类别中的照片数量
$query = mysql_query("SELECT category, COUNT(photo) FROM photos GROUP BY category") or die(mysql_error());
while($row = mysql_fetch_array($query)){
echo "Number of photos is ". $row['COUNT(photo)'] ." in cateogry ". $row['category'] .".";
echo "<br />"; }
分离所有作品,但我找不到将它们合并为一个查询的方法。 我在MySql查询中搜索“UNION”,“JOIN”,“LEFT JOIN”选项,但我不能把它们放在一起。
我想知道这一般是否可行? 如何使查询看起来像?
答案 0 :(得分:5)
试试这个,它应该有效:
SELECT cat_photos.*, count(photos.id) as number_photos
FROM cat_photos
LEFT JOIN photos ON photos.category = cat_photos.id
GROUP BY cat_photos.id, cat_photos.name, cat_photos.image
ORDER BY cat_photos.id
可以通过$row['number_photos']
访问照片数量。
答案 1 :(得分:2)
只需使用您的第二个查询并加入想要的类别元素。
快速而肮脏的东西会是:
SELECT c.category, COALESCE(COUNT(p.photo),0) as photos FROM photos p, cat_photos c
WHERE c.category = p.category
GROUP BY category
由于我不知道您的确切数据库设置,只需将所选元素更改为您真正需要的元素。
//编辑:放入Coalesce以获取包含0张照片的类别。
答案 2 :(得分:2)
不要SELECT *
。而是选择单个列,然后加入:
SELECT
cat_photos_main.id, cat_photos_main.category, cat_photos_main.photodesc, cat_photos_counts.num_photos
FROM cat_photos cat_photos_main
LEFT OUTER JOIN (SELECT category, count(*) AS num_photos FROM photos GROUP BY category) cat_photos_counts
ON cat_photos_main.category = cat_photos_counts.category