序:前两天碰到一个业务需求,当前项目中有两张表。

a表是余额变动日志表

log_idint主键
user_idint用户ID
scenetinyint变动场景
sourcevarchar来源
moneydecimal变动金额
describevarchar说明
create_timeint创建时间

b表是积分变动日志表

log_idint主键
user_idint用户ID
scenetinyint变动场景
sourcevarchar来源
valuedecimal变动积分
describevarchar说明
create_timeint创建时间

tips:现在的需求是两张表中的订单来源有些是一样,只是他们的变动场景不一样。及不同的用户获取到的金额和积分都不一样。可能有些是获得金额,有些是获得积分。要将他们整合起来。


主管给了一个整合的思路。即:

现根据指定的source找出两张表中的所有相关数据。在只求出每个数据中的表动场景(scene)的数据。将scene的值合并然后去重,在以scene和source作为条件去查找两张表中的数据。将这些数据作为集合返回给前端。


我在根据source查出的scene数据中有如下,例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$balanceSence= [
1=>1,
2=>4,
3=>6,
4=>7,
5=>8,
];
$pointsSence=[
1=>1,
2=>2,
3=>3,
4=>10
]

而后用了 array_keys()array_flip() 两个函数将他们合并去重

array_keys(array_flip($balanceSence) + array_flip($pointsSence))

得到的结果为:[1,2,3,4,6,7,8,10]

在根据这个数组加上source去两张表中查询,查询出来的数据将他们合并即可。在使用 array_push() 合并的时候发现一直报错。显示并非数组,因此困扰了好久。最后发现查询出来的数据,在模型层查询出来的数据是以对象的形式返回的,需要过一遍 toArray() 才可以返回数组。


以上就是笔记之一。