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

したがって、両方のユーザーが同じphoto_idを気に入っているため、クエリは2つのphotos_id(1000と26)のみを返す必要があります。

私がやりたいことをするためにこのコードを変更する方法はありますか?

4

3 に答える 3

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 をそれ自体に結合し、テーブルの 2 つのコピーの photo_ids を互いに一致させ、一方のテーブルのニックネームが X に一致し、もう一方のニックネームが Y に一致するように条件付けする必要があります (コメントを参照)。 )

于 2013-03-23T18:21:51.587 に答える
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 に答える
0

その部分は奇妙に見えます:

INNER JOIN loves ON loves.nick = 'userProfileName'

そうすべきではありません (写真テーブルにニックフィールドがあると仮定します):

INNER JOIN loves ON loves.nick = photos.nick 

または私はここで何かを手に入れませんでしたか?

于 2013-03-23T18:17:33.657 に答える