我不是专家,在回答我的问题时请记住这一点...... 我已经在stackoverflow上阅读了很多其他关于这里的例子,但我根本不理解如何将它用于我的任务。
我有一张相册数据库表和一张Photo数据库表:
table_album:
album_id album_creatoruser_id
-------------------------------
1 777
2 777
3 777
table_photos:
photo_id photo_album_id
-------------------------
1 1
2 1
3 1
4 1
5 2
6 2
7 3
8 3
9 3
现在,我想在我的示例中album_creatoruser_id=777
我确信它可以直接在MySQL中使用一个查询或子查询,或者使用LEFT JOIN或GROUP BY,但我无法使其工作,因为我不明白构建此查询的逻辑。
如何计算特定photo_id
创建的所有album_id
行的album_creatoruser_id
行的任何帮助都会很棒!
简而言之: album_creatoruser_id 777 有多少张照片?
答案 0 :(得分:1)
子查询的第一种可能性,用户777创建的所有照片的计数:
SELECT
COUNT(*)
FROM photo
WHERE
photo_album_id IN
(
SELECT album_id
FROM album
WHERE album_creatoruser_id = 777
)
其他:
SELECT
COUNT(*)
FROM photo p, album a
WHERE
p.photo_album_id = a.album_id
AND a.album_creatoruser_id = 777
并加入
SELECT
COUNT(*)
FROM photo p
JOIN album a
ON p.photo_album_id = a.album_id
WHERE
a.album_creatoruser_id = 777
这里没有必要进行分组,因为我们不希望在组中显示数据。
答案 1 :(得分:1)
您的基本查询是:
SELECT COUNT(*)
FROM table_album ta
JOIN table_photo tp
ON tp.photo_album_id = ta.album_id
WHERE album_creatoruser_id = **input**
我建议运行以下查询以了解其工作原理:
SELECT *
FROM table_album ta
JOIN table_photo tp
ON tp.photo_album_id = ta.album_id
会在table_album
条件下返回table_photo
的所有行及其各自的tp.photo_album_id = ta.album_id
条记录。
SELECT *
FROM table_album ta
JOIN table_photo tp
ON tp.photo_album_id = ta.album_id
WHERE album_creatoruser_id = **input**
仅将这些行过滤为album_creatoruser_id = **input**
。
SELECT COUNT(*)
FROM table_album ta
JOIN table_photo tp
ON tp.photo_album_id = ta.album_id
WHERE album_creatoruser_id = **input**
计算这些行,返回一个聚合行(COUNT()
是一个聚合函数,如SUM()
或MAX()
),结果是,您不需要{{1}因为只有一个组;所有过滤的行。
如果你想要所有的GROUP BY
s各自的计数我会建议:
album_creatoruser_id