sql - 如何获得不同的多态关联
问题描述
我试图在没有任何重复的情况下显示多态关系列表。
我有一个 StoreViews 表,其中包含一个名为 viewable 的多态字段(因此我的表中有一个 viewable_id 和 viewable_type 列)。现在我想显示每个多态关系只显示一次的视图,没有重复。
@views = StoreView.
.distinct(:viewable_id)
.distinct(:viewable_type)
.order("created_at DESC")
.limit(10)
因此,如果 StoreViews 中有两条记录,都具有相同的可视关系,@views 应该只返回最近的一条。然而,这种情况并非如此。
解决方案
ORDER BY
SELECT DISTINCT
如果指定,项目必须出现在选择列表中。有几种方法可以解决此问题。
在此示例中,使用聚合函数应该可以工作:
@views = StoreView
.select('DISTINCT viewable_type, viewable_id, MAX(created_at)')
.group(:viewable_type, :viewable_id)
.order('MAX(created_at) DESC')
.limit(10)
推荐阅读
- python - 连续真区间的开始和结束索引
- c++ - Range TS 成语和神秘的汽车 &&
- javascript - 努力将数据传输到子组件
- react-native - 如何在不重新安装组件的情况下更新我的即时搜索命中列表?
- php - 将数据插入 MySQL trought php 并过期 DATE
- python - 如果找不到 Django 对象,如何继续运行
- oauth - 当 redirect_uri 不适用时,应用程序是否有 OpenID Connect 授权类型或机制来轮询身份验证代码?
- c# - 在 Xamarin 中终止应用程序时获取位置?
- python - 如何解决 matplotlib 中的溢出错误?
- c# - 为什么我的 List<> 对象出现对象引用错误?