Mysql 使用COUNT()查找另一个表中存在多少行
这是迄今为止我一直想知道的关于数据库中照片的所有信息的查询:Mysql 使用COUNT()查找另一个表中存在多少行,mysql,sql,database,Mysql,Sql,Database,这是迄今为止我一直想知道的关于数据库中照片的所有信息的查询: SELECT users.facebook_id, users.first_name, users.last_name, photos.*, bookmarks.photo_id AS bookmark FROM photos JOIN users ON photos.author = users.facebook_id LEFT JOIN bookm
SELECT
users.facebook_id,
users.first_name,
users.last_name,
photos.*,
bookmarks.photo_id AS bookmark
FROM
photos
JOIN users
ON photos.author = users.facebook_id
LEFT JOIN bookmarks
ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
WHERE photos.description <> ''
ORDER BY photos.id DESC
以下是我已经尝试过的:
SELECT
count(votes.photo_id) as vote_count,
users.facebook_id,
users.first_name,
users.last_name,
photos.*,
bookmarks.photo_id AS bookmark
FROM
photos
JOIN users
ON photos.author = users.facebook_id
LEFT JOIN votes
ON votes.id = photos.photo_id
LEFT JOIN bookmarks
ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
WHERE photos.description <> ''
ORDER BY photos.id DESC
很明显,我做错了什么,因为当我尝试这一点时,我从来没有得到超过一张照片的结果
当我只需要一张照片的信息时,这个方法对我来说很好,但这个查询需要一次对所有照片都有效…不确定MySQL是否支持SELECT中的嵌套查询,但请尝试以下操作:
SELECT
users.facebook_id,
users.first_name,
users.last_name,
photos.*,
bookmarks.photo_id AS bookmark,
(select count(*) from votes where votes.photo_id = photo.id) AS number_of_votes
FROM
photos
JOIN users
ON photos.author = users.facebook_id
LEFT JOIN bookmarks
ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
WHERE photos.description <> ''
ORDER BY photos.id DESC
你需要分组
奇怪的是,在vots.id上有左连接投票,而在表vots中没有列id…完全正确-只要添加聚合函数(如COUNT),就需要对结果进行分组,否则它将聚合整个结果集,并只返回一行。我希望如此,但似乎没有。
SELECT
users.facebook_id,
users.first_name,
users.last_name,
photos.*,
bookmarks.photo_id AS bookmark,
(select count(*) from votes where votes.photo_id = photo.id) AS number_of_votes
FROM
photos
JOIN users
ON photos.author = users.facebook_id
LEFT JOIN bookmarks
ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
WHERE photos.description <> ''
ORDER BY photos.id DESC
SELECT
count(votes.photo_id) as vote_count,
users.facebook_id,
users.first_name,
users.last_name,
--photos.*, you have to add all fileds you need, and add them to group by
bookmarks.photo_id AS bookmark
FROM
photos
JOIN users
ON photos.author = users.facebook_id
LEFT JOIN votes
ON votes.id = photos.photo_id
LEFT JOIN bookmarks
ON photos.id = bookmarks.photo_id
AND bookmarks.facebook_id = 123456789
WHERE photos.description <> ''
group by users.facebook_id,
users.first_name,
users.last_name,
bookmarks.photo_id
ORDER BY photos.id DESC