这是典型分区查询案例,需要根据
comments
表中的
post_id
字段进行分区,同时根据条件进行排序,把符合条件的前
N
条是数据取出来。
在其他数据库(
Oracle
,
SQL Server
,
Vertica
) 包含了
row_number
partition by
这样的函数,能够比较容易的实现。
比如在
SQL Server
中:
SELECT * FROM (
SELECT *, row_number() OVER (partition by post_id ORDER BY created_at desc) rank FROM comments where post_id in (1,2,3,4,5)
) b where rand < 11;
select * from `posts` limit 15 offset 0;
select `c`.`id` from (select b.*,IF (
@post = b.post_id ,@rank :=@rank + 1 ,@rank := 1
) AS rank,
@post := b.post_id from (select *,@post := NULL ,@rank := 0 from `comments` where `post_id` in ("2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16") order by `post_id` asc) as b) as c where `rank` < "11";
select * from `comments` where `id` in ("180", "589", "590", "3736");
摘要:复杂的条件在的条件查询中,不只有这些基本的子句,还有等复杂一些的子句。这篇我们就来讲一下查询构造器如何构造这些复杂的查询语句。
复杂的条件
在 SQL 的条件查询中,不只有 where、or where 这些基本的子句,还有 where in、where exists、where between 等复杂一些的子句。而且即使是 where 这种基础的子句,也有多个条件的多种逻辑组合。这篇...