如何根据具有相同用户ID的两个日期选择对象ID?

时间:2018-10-08 19:53:19

标签: mysql sql

现在我有以下代码:

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
            );

0 个答案:

没有答案