Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在SQL查询中使用select as偏移量的结果_Php_Mysql_Sql_Offset - Fatal编程技术网

Php 如何在SQL查询中使用select as偏移量的结果

Php 如何在SQL查询中使用select as偏移量的结果,php,mysql,sql,offset,Php,Mysql,Sql,Offset,我试图创建一个SQL查询来返回我需要的内容,而不是创建两个查询,但是我需要使用其中一个查询的结果作为另一个查询的偏移量 我的表格中有带分数的用户答案,每个用户在该表格中可能有多个答案。我想计算有序分数表的中间点 例如: 用户回答: 用户1-5分 用户1-15分 用户2-8分 用户3-12分 排名表: 用户1-20分 用户3-12分

我试图创建一个SQL查询来返回我需要的内容,而不是创建两个查询,但是我需要使用其中一个查询的结果作为另一个查询的
偏移量

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

例如:

用户回答:

  • 用户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
    
    查询结果:

    职位:2

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

    SELECT sum(points) as score 
    FROM us_user_response 
    where id_round=1 
    GROUP BY id_user 
    Order by score DESC
    
    现在我想创建一个返回中间用户分数的大查询,我只需要使用第一个查询结果作为第二个查询的
    offset

    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;
    

    你不能也选择他们的用户id,然后使用它吗?我需要中间分数。。。唯一的方法是获取有序表的中间元素…查询工作正常!我只想接受这两个查询并只创建一个。使用第一个作为第二个查询的偏移量。为什么在主查询中使用
    id\u round=214
    ,而在职位查询中使用
    id\u round=1
    ?它认为,如果他们都查询同一轮,它应该可以正常工作。@Barmar很抱歉214的值,复制过去的打字错误。