计算前5个用户,其中当前类别或类别中的点数最多

时间:2012-05-17 09:54:51

标签: php mysql

我的网站上有一个积分系统,可以获得不同网站类别中不同成就的积分。类别可以使用'category_relations'表来包含子类别和父类别,其中'links_to'和'links_from'字段包含相关的category_id。

我想要做的是获取当前类别中点数最多的前5位用户以及其下方的任何类别。

我的'points_awarded'表格包含所有获奖积分的记录以及来自哪些类别的用户:

USER_ID,
points_amount, 加(tinyint布尔值,如果它是否添加点),
减去(如果是点罚分,则为tinyint布尔值),
CATEGORY_ID

我真的不知道从哪里开始。我是否需要有两个查询,一个用于获取所有子类别ID,然后一个用于运行另一个查询来获取所用点的SUM()?是否可以在一个查询中执行此操作?

1 个答案:

答案 0 :(得分:2)

我需要更多关于您的数据库表的信息,但是这样的事情可能会起作用:

SELECT 
    `user_id`, 
    SUM(IF(`plus`, `points_amount`, 0)) - SUM(IF(`minus`, `points_amount`, 0)) AS `points`
FROM 
    `points_awarded`
WHERE
    `user_id` = $user_id
    AND (
        `category_id` = $cat_id
        OR `category_id` IN(
            SELECT `links_to`
            FROM `category_relations`
            WHERE `links_from` = $cat_id
        )
    )
GROUP BY `user_id`

我很好奇,为什么你有一个加号字段和一个负字段?如果加号是假的,我们不能假设它是负的吗?为什么还有任何一个字段,为什么不让points_amount成为签名字段?