我正在尝试构建一个用户个人资料,所以我在数据库中展示了她喜欢的所有内容。 但我想查看具有活动会话的用户是否喜欢某些用户个人资料。
所以,表名是爱,结构是:
photo_id (int)
nick (varchar)
date (timestamp)
照片表结构:
photo_id (int)
path (varchar)
title (varchar)
category (varchar)
nick (varchar)
date (timestamp)
这就是我要进行查询的方式:
SELECT photos.photo_id
FROM photos
INNER JOIN loves ON loves.nick = 'userProfileName'
WHERE loves.nick = 'userWithActiveSession'
AND photos.photo_id = loves.photo_id
ORDER BY loves.photo_id DESC
LIMIT 100
此查询应返回具有活动会话的用户喜欢的所有照片ID以及来自配置文件请求用户的喜欢的照片。
示例
loves table:
nick photo_id
userProfile 26
userProfile 1000
userProfile 27
userProfile 520
userSession 26
userSession 680
userSession 1000
因此查询应该只返回两个photos_id(1000和26),因为两个用户都喜欢相同的photo_id。
有没有办法修改这段代码来做我想做的事?
答案 0 :(得分:1)
你可以不加入像这样的照片:
SELECT photo_id
FROM loves
WHERE photo_id in (select photo_id from loves where nick = "userProfile" )
AND photo_id in (select photo_id from loves where nick = "userSession" )
GROUP BY photo_id
ORDER BY loves.photo_id DESC
LIMIT 100
答案 1 :(得分:1)
所以你想要X拥有的所有照片(photos.nick = X)并被Y喜欢?
SELECT photos.photo_id FROM photos INNER JOIN loves
ON loves.photo_id = photos.photo_id
WHERE loves.nick = Y AND photos.nick = X
ORDER BY photos.photo_id DESC LIMIT 100
如果你想要X和Y喜欢的照片,那么你需要加入对自己的喜爱,将桌子的两个副本中的photo_id相互匹配,并调整一个表的缺口与X匹配,另一个匹配Y. (见评论)
答案 2 :(得分:0)
那部分看起来很奇怪:
INNER JOIN loves ON loves.nick = 'userProfileName'
不应该(假设照片桌上有一个缺口字段):
INNER JOIN loves ON loves.nick = photos.nick
或者我在这里没有得到什么?