数据库是案例中经常用到的后台组件,而且往往一个案例中会使用多个数据库存储数据,当这些数据库之间有公共字段且存在一定关系时我们就会使用到多表联查。
一.多表联查
例如下图,图片表中数据ID字段为唯一标识字段,我们要在喜欢表中引用图片表的数据时,并不是将图片直接添加在喜欢表中,而是将图片的数据ID保存在喜欢表的imageID字段中。反之,通过这个imageID我们可以在图片表中找到唯一确定的图片数据。
二.案例事件
1.输出数据服务
在输出数据服务中我们要做的不光是输出图片库中全部图片的资源地址,还需要统计每张图片总共被点赞的次数和是否被当前用户点赞。
首先我们将图片表输出到后台的对象数组“图片列表”中,可以注意到“图片列表”中除了对应图片表中数据ID和image两个字段外还添加了like和islike两个字段,其中like用于存储该图片被点赞的总次数,而islike用于存储图片是否被当前用户点赞。不过由于数据库中没有这两个字段,所以此时这两个字段都还是空值。
接下来我们使用一个循环语句遍历对象数组的每一行数据。每次循环中我们先统计喜欢表中imageID字段等于该行图片数据ID且islike字段为1的记录条数,将统计结果填到该行的like中,然后再从喜欢表中输出image字段等于该行图片数据ID且提交用户为当前用户的记录,根据统计结果设置islike的值。这里使用了一个三元表达式,如果输出行数是0行就表示当前用户没有点赞过该图片直接赋值为0。如果有输出记录,那么输出结果中的islike就可能为1(用户点赞过)也可能为0(用户点赞过又取消了),这里我们不需要再进行判断而将其直接赋值到对象数组中即可。最后我们将对象数组“图片列表”返回到前台。
2.提交图片服务
提交图片中我们将图片URL地址传给服务,在图片表中添加一条数据即可。
3.喜欢与否服务
喜欢与否服务用于用户对图片的点赞状态发生改变时,其接收参数就是图片的ID和用户当前对图片的点赞状态。首先从喜欢表中统计提交用户为当前用户且image字段为所传图片的记录条数,如果为0说明用户对该图片没有点赞过,就直接将接收参数提交到喜欢表中,如果统计结果不为0则将接收参数更新到喜欢表中。
是否使用多表联查一定要结合自己的案例实际情况。一般而言,直接绑定数据的话在制作时逻辑会比较简单,但是会增加后期维护的难度;而使用多表联查则相反,在制作案例时逻辑会更加复杂一些,但是有利于后期维护和改动。