加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 如何在SQL查询中将select的结果用作偏移量

发布时间:2020-12-13 22:51:01 所属栏目:PHP教程 来源:网络整理
导读:我试图创建一个单独的SQL查询来返回我需要的内容,而不是创建2个查询,但我需要使用其中一个查询的结果作为另一个查询的偏移量. 我的表有用户答案和分数,每个用户可能在该表中有多个答案.我想计算有序分数表的中间点. 例: 用户回答: 用户1 – 5分 用户1 – 1
我试图创建一个单独的SQL查询来返回我需要的内容,而不是创建2个查询,但我需要使用其中一个查询的结果作为另一个查询的偏移量.

我的表有用户答案和分数,每个用户可能在该表中有多个答案.我想计算有序分数表的中间点.

例:

用户回答:

>用户1 – 5分
>用户1 – 15分
>用户2 – 8分
>用户3 – 12分

排名表:

>用户1 – 20分
>用户3 – 12分<中点
>用户2 – 8分

解:

第一个查询计算中间点:

SELECT CEILING(count(Distinct(id_user)) / 2) as position 
FROM us_user_response 
where id_round=1

查询结果:

position : 2

第二个查询创建有序排名表:

SELECT sum(points) as score 
FROM us_user_response 
where id_round=1 
GROUP BY id_user 
Order by score DESC

现在我想创建一个返回中间用户得分的大查询,我只需要将第一个查询结果用作第二个查询的偏移量:

SELECT sum(points) as score 
      FROM us_user_response 
      where id_round=1
      GROUP BY id_user 
      Order by score DESC LIMIT 1
        OFFSET (SELECT CEILING(count(Distinct(id_user)) / 2) as position 
                FROM us_user_response where id_round=1)

当然,这不起作用,有没有办法将结果用作偏移量?

编辑:

查询效果很好!我的问题是,是否有任何方法可以将查询结果用作另一个查询的结果.所以我可以在一个查询中完成此任务.

解决方法

尝试这样的事情:

SET @line_id = 0;
SET @line_offset = (
    SELECT CEILING(count(Distinct(id_user)) / 2) as position 
    FROM us_user_response 
    WHERE id_round = 1
);

SELECT sum(points) as score,IF((@line_id := @line_id + 1) = @line_offset,1,0) AS useit 
FROM us_user_response 
WHERE id_round = 1
GROUP BY id_user 
HAVING useit = 1
ORDER BY score;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读