2012-08-03 64 views
0

我只想将COUNT(page_ID)的值设置为@current_rank,但我不得不多次使用MAX(rating_time),因为我可以有几个关于WHERE的“page_ID”记录条款但在不同日期(“rating_time”)。在SELECT中设置一个具有2个元素的变量

而在这些潜在的多个page_ID记录中,我想要最近的。

SET @current_rank = (SELECT COUNT(page_ID), MAX(rating_time) 
    FROM ranks_update 
    WHERE ranking_ID = NEW.ranking_ID 
     AND page_ID <> NEW.page_ID 
     AND current_sum_vote >= @current_sum_vote 
     AND rating_time >= (*** a subquery ***) 
    GROUP BY page_ID); 

PS:我在MySQL中使用触发器。

回答

0

我认为解决的办法是(请纠正我,如果我错了):

SELECT COUNT(page_ID) 
    FROM (
    SELECT page_ID, MAX(rating_time) 
    FROM ranks_update 
    WHERE ranking_ID = NEW.ranking_ID 
     AND page_ID <> NEW.page_ID 
     AND current_sum_vote >= @current_sum_vote 
     AND rating_time >= (*** a subquery ***) 
    GROUP BY page_ID 
    ) ru 
1

尝试

SELECT @current_rank = COUNT(page_ID), @max_rating = MAX(rating_time) 
    FROM ranks_update 
    WHERE ranking_ID = NEW.ranking_ID 
     AND page_ID <> NEW.page_ID 
     AND current_sum_vote >= @current_sum_vote 
    GROUP BY page_ID; 
+0

MySQL错误:#1415 - 不允许返回从触发 – Anon 2012-08-03 04:58:23

0

如果有MAX功能的目的有过滤的记录,你宁愿把在where子句中的子查询。类似下面:

SET @current_rank = (SELECT COUNT(page_ID) 
FROM ranks_update 
WHERE ranking_ID = NEW.ranking_ID 
    AND page_ID <> NEW.page_ID 
    AND current_sum_vote >= @current_sum_vote 
    AND rating_time in 
    (select MAX(rating_time) from ranks_update as ru where ru.page_ID = NEW.page_ID) 
GROUP BY page_ID); 
+0

结果集其实我已经在WHERE子句中使用了rating_time上的子查询,我更新了第一篇文章。它会改变你的答案吗? – Anon 2012-08-03 05:24:32

+0

如果我错了,请纠正我,但是我从您的描述中了解到'MAX(rating_time)'仅用于强制获得最大额定时间,并且没有理由选择它。这就是为什么我没有放入我的选择查询的一部分。如果我上面解释的是这种情况,那么不需要实际选择MAX(rating_time)。您可以将它用作where子句中的过滤器。但是,如果你的@current_rank是一个数据(两列记录集),你确实需要'MAX(rating_time)',我的查询应该被改变。 – 2012-08-03 06:35:06

相关问题