MYSQL 查询前 40 条记录和其他记录
MYSQL query for first 40 records and else records
我有一个 table 名称 'tbl_featured_professional',其中字段是:
id,
user_id,
ranking and
score,
createdDate
我想要的是前 40 条记录按排名排序(这是唯一的),而 40 条之后的所有其他记录按分数排序。我想从 mysql 而不是 PHP 开始。我怎样才能做到这一点?谢谢。
检查我的解决方案
select * from
(
select * from tbl_featured_professional
order by ranking
limit 40
)
union all
select * from
(
select * from tbl_featured_professional
order by score
limit 9999999 offset 40
)
与 UNION ALL
和 NOT IN
一起使用 2 个子查询应该适合您。
第一个查询将 select 按 ranking
排序的 40 行,带有子查询的第二个查询将 select 所有其他行 除了第一个 第一个子查询已经 select 编辑了 40 行,并按 score
对其排序。 UNION ALL 子句将这 2 个子查询记录合并为一个集合。希望这会有所帮助并且可以理解 :) 现在。
SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40
UNION ALL
SELECT * FROM tbl_featured_professional WHERE id NOT IN (SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40)
ORDER BY score
使用 2 个子查询和 UNION
。
第 1 个获得按 ranking
排序的前 40 个
第二个按 score
:
对剩余行重新排序
SELECT *
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
SELECT * FROM (
SELECT * FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40, 18446744073709551615
)
ORDER BY score
)
18446744073709551615
= 2^64 - 1
,参见 this。
如果排名——顾名思义——是一个从 1 开始递增的数字,那么:
select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
(case when fp.ranking <= 40 then ranking end),
score;
我有一个 table 名称 'tbl_featured_professional',其中字段是:
id,
user_id,
ranking and
score,
createdDate
我想要的是前 40 条记录按排名排序(这是唯一的),而 40 条之后的所有其他记录按分数排序。我想从 mysql 而不是 PHP 开始。我怎样才能做到这一点?谢谢。
检查我的解决方案
select * from
(
select * from tbl_featured_professional
order by ranking
limit 40
)
union all
select * from
(
select * from tbl_featured_professional
order by score
limit 9999999 offset 40
)
与 UNION ALL
和 NOT IN
一起使用 2 个子查询应该适合您。
第一个查询将 select 按 ranking
排序的 40 行,带有子查询的第二个查询将 select 所有其他行 除了第一个 第一个子查询已经 select 编辑了 40 行,并按 score
对其排序。 UNION ALL 子句将这 2 个子查询记录合并为一个集合。希望这会有所帮助并且可以理解 :) 现在。
SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40
UNION ALL
SELECT * FROM tbl_featured_professional WHERE id NOT IN (SELECT * FROM tbl_featured_professional ORDER BY ranking LIMIT 40)
ORDER BY score
使用 2 个子查询和 UNION
。
第 1 个获得按 ranking
排序的前 40 个
第二个按 score
:
SELECT *
FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40
UNION ALL
SELECT * FROM (
SELECT * FROM (
SELECT * FROM tbl_featured_professional
ORDER BY ranking
LIMIT 40, 18446744073709551615
)
ORDER BY score
)
18446744073709551615
= 2^64 - 1
,参见 this。
如果排名——顾名思义——是一个从 1 开始递增的数字,那么:
select fp.*
from tbl_featured_professional fp
order by (fp.ranking <= 40) desc,
(case when fp.ranking <= 40 then ranking end),
score;