现状:
日志有两张表,第一张是操作总览,第二张是详细记录,第一张表和第二张的关系是一对多的关系。
需要一次将这两个都查出来,分页按照第一张表进行分页,不包含第二张表的笛卡尔积;但是需要第二张表的一行作为条件
解决方案:
暂时有两种或三种解决方案
一、将第二张表的行挪到第一张表中
将第二张表的行浓缩到第一张表中,因为是一对多的关系,所以不能使用普通的字段来表示,可以使用二进制的保存方法,类似于linux中文件权限的设置一样。
一位对应一个类型,比如说我现在有三个状态a、b、c,
如果一个操作只有a一个状态,二进制就是001,转换成十进制就是1
如果一个操作有a、b两个状态,二进制就是011,转换成十进制就是3,以此类推
然后查询分页的时候就可以先按照第一张表进行查询分页,然后再关联查询第二张表,带入条件选出需要的数据
二、使用行号对第一张表进行标号
创建一个行好,对第一张表的ID进行绑定,然后关联查询
select column_name,column_name2,column_name3 from (
SELECT
column_name,
column_name2,
column_name3,
CASE
WHEN table_name.column_name != @next THEN @table := @table + 1
ELSE @table
END AS count,
@next := table_name.column_name
FROM
table_name inner join table_name2 on column_name = column_name3 ,
(SELECT @table := 0, @next) AS t
) as t2
where t2.count >= 0 and t2.count <=2
三、分步操作(比较繁琐)
先关联查询,查询出符合条件的总览id,然后再对第一张表进行分页,再进行自查询查询出需要的第二张表数据