2014-09-17 6 views
0

У меня есть система PHP, которая позволяет пользователям голосовать за фотографии по шкале от 1 до 5, что я хочу сделать, это выделить, где два человека дают друг другу одинаковый голос/оценку. На данный момент я не могу вычислить SQL для моей функции PHP.Voting SQL conundrum

База данных выглядит следующим образом

 
id, user_uid, voted_uid, score 

Как кто-то голосует идентификатор автоматического инкрементного, то user_id подставляется из сеанса UID и voted_uid происходит от изображения пользователь просматривает, то оценка является рейтинг от 1 до 5.

В теории мы поэтому ищем двух одинаковых строк, как это:

 
uid  user_uid  voted_uid  score 
7   3    5   3 
38  5    3   3 

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

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

+0

Можем ли мы увидеть вашу (частичную) попытку? Это поможет направить ответы и дать читателям уверенность в том, что они правильно поняли проблему. – halfer

+1

Что означает «идентификатор сеанса 3»? –

+0

Когда пользователь регистрируется на этом сайте, им присваивается уникальный идентификатор пользователя, и это назначается сеансу, например. 3 в этом случае. – user1573686

ответ

1

Если вы правильно поняли, что вы хотите найти пары строк, где user_uid первой строки равно voted_uid во второй строке и наоборот. Но только, если score одинаково в обеих строках.

В этом случае, это следует сделать трюк:

SELECT a.* 
FROM table AS a 
JOIN table AS b 
    ON a.user_uid = b.voted_uid 
AND a.voted_uid = b.user_uid 
AND a.score  = b.score; 

Если вы хотите только те строки, которые «упоминается» конкретный идентификатор пользователя, вы, конечно, придется добавить WHERE user_uid = 3 OR voted_uid = 3.

+0

Но вся информация в той же таблице, вы не можете присоединиться к таблице к себе можете ли вы? – user1573686

+1

@ user1573686, да, вы можете присоединиться к таблице для себя. Это цель сглаживания через 'AS' - они эффективно действуют как разные таблицы. – halfer