2013-03-23 9 views
0

Я пытаюсь создать профиль пользователя, поэтому я показываю все ее предпочтения из базы данных. Но я хочу посмотреть, понравился ли пользователь, имеющий активный сеанс, какой-то пользовательский профиль.Выбор идентификатора с внутренним соединением

Таким образом, имя таблицы любови и структура:

photo_id (int) 
nick  (varchar) 
date  (timestamp) 

фото Структура таблицы:

photo_id (int) 
path  (varchar) 
title (varchar) 
category (varchar) 
nick  (varchar) 
date  (timestamp) 

Это, как я traying сделать запрос:

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 

Этот запрос должен возвращать все идентификаторы фотографий, которые пользователь с активной сессией понравился любимыми фотографиями из профи запрашиваемый файл.

Пример

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.

Есть ли способ изменить этот код, чтобы сделать то, что я хочу?

+1

Какова структура таблицы для 'photos'? –

+0

Вы хотите иметь идентификаторы фотографий фотографий ** как **, так и идентификаторы фотографий, которые ** нравится одному из них **? – Geier

+0

Извините, посмотрите отредактированный пост. –

ответ

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 

Если вы хотите фотографии понравившихся по Й и Y, то вы должны присоединиться к любови к себе, соответствуя photo_ids из двух копий таблицы друг к другу, и кондиционер, что ник одной таблицы совпадает Й и другие спички Y. (См. комментарии)

+0

Нет, я хочу получить photo_id, когда пользователю Y нравится тот же фото_ид, что пользователь X –

+0

Да, это возможно? –

+0

Вы хотите найти photo_ids, как X, так и Y? Тогда вы должны присоединиться к любви к себе. 'SELECT _a.photo_id FROM любит _a INNER JOIN любит _b ON _a.photo_id = _b.photo_id WHERE _a.nick = X И _b.nick = Y' – atw13

0

Эта часть выглядит странно:

INNER JOIN loves ON loves.nick = 'userProfileName' 

не должен он быть (при условии, есть поле ника на фото стол):

INNER JOIN loves ON loves.nick = photos.nick 

или я не получил что-то здесь?

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 

DEMO HERE

+0

Не работает для меня! –

+0

некоторые примеры данных из ваших таблиц и желаемый результат, пожалуйста, если можете. отредактируйте ваш вопрос и добавьте их –

+0

Я пытаюсь получить «нравится» из профиля пользователя, а затем посмотреть, нравится ли это совпадение с зарегистрированным пользователем! –

Смежные вопросы