MySQL检查用户是否喜欢照片

时间:2014-10-15 20:45:31

标签: php mysql laravel-4

我在Laravel有一个画廊应用程序。我有桌面用户,照片和喜欢。

users
--id
--name
--email

photos
--id
--user_id
--name
--likes
--created_at

likes
--id
--user_id
--photo_id

我将照片分页为5。

SELECT * FROM `photos` order by created_at desc limit 0,5 

我如何编写查询以检查当前用户是否喜欢这些照片而不为每张照片单独查询?

2 个答案:

答案 0 :(得分:3)

使用JOIN Syntax。并IF() Control Flow Function获得明确的输出。

如果您确定likes中表user_id中的记录是唯一的,那么这就足够了:

SELECT `photos`.*, IF(`likes`.`id` IS NULL, 'no', 'yes') as `he_likes_it`
FROM `photos`
LEFT JOIN `likes` on `likes`.`photo_id` = `photos`.`id` AND `likes`.`user_id` = 123
ORDER BY `photos`.`created_at` DESC
LIMIT 0,5

如果您不确定表likes中的记录是user_id唯一的,那么您需要对结果集进行分组,以避免相乘的条目,并使用聚合函数,例如COUNT()

SELECT `photos`.*, IF(COUNT(`likes`.`id`) > 0, 'yes', 'no') as `he_likes_it`
FROM `photos`
LEFT JOIN `likes` on `likes`.`photo_id` = `photos`.`id` AND `likes`.`user_id` = 123
GROUP BY `photos`.`id`
ORDER BY `photos`.`created_at` DESC
LIMIT 0,5

答案 1 :(得分:1)

你需要做加入

 SELECT photos.*, count(photos.id) as likes_count FROM `likes`
    LEFT JOIN `photos` ON likes.photo_id = photos.id
    GROUP BY likes.photo_id
    WHERE photos.user_id = 12345