举个例子,查询用户购买记录表
需求:查询某用户最近的购买 10 个的记录,查询某用户购买记录表的某某字段为 XXX 的最近的 6 个记录,查询某用户最新的一个购买记录。这 3 个查询的结果集,未来有可能会需要展示到同一个界面上。
这个查询需求怎么实现最好呢?各位有哪些实现方式?各位觉得直接在 select 上写 where+order by+Limit 合适么,我感觉直接在 select 上写 limit+order by+where 有点不放心,万一数据量大怎么办?
我的话,在 Postgresql 是这样的搞,建立一个表叫“user_last_buy_record”。主键是用户 id,还有三个字段,第一个叫 last_array 和第二个叫 last_xxx_array,这两个数据类型都是长整型数组,第三个叫 last_new,数据类型是长整型。
每次插入用户购买记录时,会把插入的 id 修改到 user_last_buy_record 表的 last_array 里,更新 last_array 字段,如果插入的数据中的某字段为 XXX,则把插入的 id 修改到 last_xxx_array 。( last_xxx_array,last_array,把数组的元素位置从第二位开始都往后挪,最终倒数第二个替换掉倒数第一个,然后把新的值修改到数组的第一个位置)
查询时通过 user_last_buy_record 表记录的主键 id 去 left join 查询,相比 where+limit+order by 的方式有什么问题呢。
对于这个需求,各位觉得有哪些更合适的实现方式呢?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.