Php 如何在SQL中使用多个超过5的相同输出获取前5个值
我需要搜索前5名的最高值,但不是只有5个结果,我需要这7个50和40值的用户 我不能忽视其他顶级用户。 如果可以在SQL中完成,那就太好了。如果没有PHP的帮助就可以了Php 如何在SQL中使用多个超过5的相同输出获取前5个值,php,mysql,Php,Mysql,我需要搜索前5名的最高值,但不是只有5个结果,我需要这7个50和40值的用户 我不能忽视其他顶级用户。 如果可以在SQL中完成,那就太好了。如果没有PHP的帮助就可以了 Database 1 Database 2 ||==============|| ||==============|| ||user || value || ||user || value || ||-----||-------|| ||-----||-------|| || 1
Database 1 Database 2
||==============|| ||==============||
||user || value || ||user || value ||
||-----||-------|| ||-----||-------||
|| 1 || 50 || || 1 || 50 ||
|| 2 || 50 || || 2 || 50 ||
|| 3 || 50 || || 3 || 40 ||
|| 4 || 40 || || 4 || 40 ||
|| 5 || 40 || || 5 || 30 ||
|| 6 || 40 || || 6 || 20 ||
|| 7 || 40 || || 7 || 20 ||
|| 8 || 30 || || 8 || 10 ||
|| 9 || 30 || || 9 || 10 ||
||==============|| ||==============||
另一种方式是:
SELECT user, value
FROM Database
WHERE value in (
SELECT value
FROM Database
ORDER BY value DESC
LIMIT 5)
)
ORDER BY value DESC, user
通常,对于给定的表,您可以执行以下操作:
SELECT user, value
FROM Database
WHERE value >= (SELECT MIN(value)
FROM (SELECT value
FROM Database
ORDER BY value DESC
LIMIT 5) AS x
)
ORDER BY value DESC, user
子查询选择第五行(OFFSET
从0开始计数,而不是从1开始计数)。where
子句只选择大于该值的任何值
如果您想在两个合并的表上运行此操作,那么您需要使用
union-all
我很困惑。你想要前五名还是前七名?显示这个假设查询的预期结果。@wavemode他想要的是前5名加上关系。哦,好的,原来只显示数据库1。第二个表是做什么的?我以为第二个结果是第二个数据库的预期结果。但现在我不确定。为什么第二个结果中的所有值都是50
?+1我在回答中没有想到偏移选项。
SELECT user, value
FROM Database
WHERE value >= (SELECT MIN(value)
FROM (SELECT value
FROM Database
ORDER BY value DESC
LIMIT 5) AS x
)
ORDER BY value DESC, user
SELECT t.*
FROM table t CROSS JOIN
(SELECT t.*
FROM table t
ORDER BY value DESC
LIMIT 1 OFFSET 4
) t5
WHERE t.value >= t5.value;