我有一个rails应用程序,其中我有2个桌子......俱乐部和俱乐部会员......
俱乐部有很多俱乐部成员 俱乐部成员属于俱乐部...... 我将提供表格列的截图我的俱乐部成员使用club_id外键引用俱乐部
我想根据俱乐部成员的最大数量来找出俱乐部...... 我正在使用这样的查询..但这不起作用..任何人都可以根据俱乐部成员的数量帮助我订购俱乐部吗?
我当前的查询
<textarea id="given"></textarea>
<p>your input:</p>
<div id="typed" contentEditable="true"></div>
答案 0 :(得分:2)
你正在加入错误的密钥:
SELECT c.*, COUNT(cm.id) AS total
FROM clubs c INNER JOIN
clubmembers cm
ON c.id = cm.club_id
GROUP BY c.id
ORDER BY total DESC;
请注意,我还引入了表别名。这些使查询更容易编写和阅读。
答案 1 :(得分:1)
在属于关联上使用rails :counter_cache
选项。
This blog显示了如何快速设置一个。
长话短说,您可以向名为clubs
的{{1}}添加一列。然后更新members_count
模型,使其具有以下关联线(包括您已有的任何其他关联修饰符)
members
如果数据集足够小,则需要运行belongs_to :author, counter_cache: true
,或者如果数据集很大,则需要按照the blog中列出的指南来初始化现有数据的计数。
完成此设置后,您只需将Club.reset_counters
添加到俱乐部的任何rails查询中即可。这消除了对连接请求的需要(通过让成员在加入/离开俱乐部时更新计数)。这将提高排序的效率。
注意强>
仅当通过rails创建/更新/销毁数据时,此操作才有效。如果任何其他系统修改数据或进行直接数据库编辑,它将不会触发回调,也不会更新计数器缓存。