1

これは、これまでデータベース内の写真について知りたいと思っていたすべてを取得してきたクエリです。

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

しかし、ここでもう 1 つ情報を入手したいと思います。特定の写真に何票が投じられたか知りたいです。

ここに私の投票表があります:

CREATE TABLE IF NOT EXISTS `votes` (
  `photo_id` int(11) NOT NULL,
  `facebook_id` bigint(20) NOT NULL COMMENT 'The user''s Facebook ID.',
  `date` varchar(10) NOT NULL COMMENT 'Date formatted as YYYY-MM-DD.',
  UNIQUE KEY `one_vote_per_day` (`photo_id`,`facebook_id`,`date`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

そして、これが私がすでに試したことです:

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

明らかに、私は何か間違ったことをしています.

この方法は、1 枚の写真に関する情報のみが必要な場合にはうまく機能しますが、このクエリはすべての写真に対して一度に機能する必要があります...

4

2 に答える 2

3

あなたが必要group by

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
于 2012-10-11T20:47:31.277 に答える
0

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
于 2012-10-11T20:46:37.860 に答える