Сейчас у меня есть этот код:
select t1.* from
(
select *
FROM useractions
WHERE userid = '$userID'
AND action= 'Like'
) t1
inner join (
select *
FROM useractions
WHERE userid = '$userID'
AND action='Dislike'
) t2 ON t1.userid = t2.userid and t1.date > t2.date
where t1.userid = '$userID'
Проблема в том, что он не учитывает, с какой целью мы работаем.
Так что процесс такой.
В моей базе данных у меня 4 таблицы.userid, objectid, action и date.
userid - это идентификатор, который я отправляю, когда делаю запрос.с помощью этого идентификатора пользователя я вижу, с какими объектами взаимодействовал пользователь.
objectid, идентификатор объекта.
действие, описывает, когда был проведен аукцион.может быть как или не нравится.Всякий раз, когда действие выполняется, дата сохраняется.
дата, дата, когда было выполнено действие с объектом.
Итак, пользовательский случай - это, я отправляю идентификатор пользователя.Теперь мне нужно найти все объекты, которые понравились пользователю.проблема в том, что пользователю может не понравиться этот объект после того, как он ему понравился.вместо того, чтобы удалить это в моей базе данных, я вместо этого добавил дату, чтобы определить, было ли подобное сделано после неприязни.(я сохраняю неприязнь по другим причинам, поэтому я просто не удаляю объект).
Итак, какие предметы я хочу выбрать?С тем же идентификатором пользователя мы находим элемент.Мы видим, что это нравится, и мы получаем объект.Теперь нам нужно посмотреть, не нравится ли это.Если это так, то нам нужно сравнить даты, не понравилось ли это более свежему, что понравилось?Если это так, мы не можем выбрать его.Однако если подобное было более новым, его следует выбрать.Если не было неприязни к понравившемуся объекту с этим конкретным пользователем, он должен быть выбран.
Как бы я расширил свой запрос для работы с этим пользовательским регистром?
Это еще один codenippet iпытался работать с:
SELECT ua.*
FROM useractions ua
WHERE ua.userid = '$userID' AND ua.action ='Like' AND
NOT EXISTS (SELECT 1
FROM useractions ua2
WHERE ua2.userid = ua.userid AND
ua2.action = 'dislike' AND
ua2.date > ua.date
);