0

我正在尝试构建一个用户配置文件,所以我从数据库中显示了她所有的喜欢。但我想看看拥有活动会话的用户是否喜欢某些用户个人资料。

所以,表名是loves,结构是:

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。

有没有办法修改这段代码来做我想做的事?

4

3 回答 3

1

您可以像这样在不加入的情况下获得 photo_id:

  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

在这里演示

于 2013-03-23T18:19:02.467 回答
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 都喜欢的照片,那么您需要将loves 加入到自身中,将表格的两个副本中的 photo_ids 相互匹配,并规定一个表格的昵称与 X 匹配,另一个与 Y 匹配。(见评论)

于 2013-03-23T18:21:51.587 回答
0

那部分看起来很奇怪:

INNER JOIN loves ON loves.nick = 'userProfileName'

不应该吗(假设照片表上有一个昵称字段):

INNER JOIN loves ON loves.nick = photos.nick 

或者我在这里没有得到什么?

于 2013-03-23T18:17:33.657 回答