Php 如何在SQL查询中使用select as偏移量的结果
我试图创建一个SQL查询来返回我需要的内容,而不是创建两个查询,但是我需要使用其中一个查询的结果作为另一个查询的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分
偏移量
我的表格中有带分数的用户答案,每个用户在该表格中可能有多个答案。我想计算有序分数表的中间点
例如:
用户回答:
用户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的值,复制过去的打字错误。