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 ||
||==============|| ||==============||
我需要搜索前5个最高值,但不是只有5个结果,我需要那些具有50和40个值的7个用户。
我不能忽视他们的其他热门用户。 如果可以在SQL中完成那将是很棒的。如果没有PHP的帮助会做。
Result 1 Result 1
||==============|| ||==============||
||user || value || ||user || value ||
||-----||-------|| ||-----||-------||
|| 1 || 50 || || 1 || 50 ||
|| 2 || 50 || || 2 || 50 ||
|| 3 || 50 || || 3 || 50 ||
|| 4 || 40 || || 4 || 50 ||
|| 5 || 40 || || 5 || 50 ||
|| 6 || 40 || ||==============||
|| 7 || 40 ||
||==============||
答案 0 :(得分:1)
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
答案 1 :(得分:1)
通常,对于给定的表,您可以执行以下操作:
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;
子查询选择第五行(OFFSET
从0开始计数而不是1)。 where
子句只选择大于该值的任何内容。
如果你想在两个表合并上运行它,那么你会想要使用union all
。