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