现在我有以下代码:
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'
问题在于它没有考虑到我们正在使用的对象id。
所以过程是这样的。
在我的数据库中,我有4个表。用户ID,对象ID,操作和日期。
userid是我执行查询时发送的ID。使用此用户ID,我可以看到用户与之交互的对象。
objectid,对象的ID。
action,描述何时进行拍卖。可以是喜欢或不喜欢。只要执行此操作,就会存储日期。
日期,对对象执行操作的日期。
因此,用户案例是这个,我发送一个用户ID。现在,我需要找到用户喜欢的所有对象。问题在于,用户一旦喜欢了该对象,便可能会不喜欢它。我没有在数据库中删除它,而是添加了一个日期来确定是否在不喜欢之后进行了赞。 (由于其他原因,我不喜欢它,所以这就是为什么我只是不删除该对象)。
那么我要选择哪些项目?使用相同的用户ID,我们找到一个项目。我们看到它被喜欢了,并得到了objectid。现在我们需要看看它是否不受欢迎。如果是,那么我们需要比较日期,是否更喜欢最近的不喜欢的东西?如果是这样,我们将无法选择它。如果类似的东西是较新的,则应选择它。如果没有发现该特定用户对喜欢的对象不满意,则应选择该对象。
我将如何扩展查询以使其适用于此用户案例?
这是我尝试使用的另一个代码段:
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
);