基于SQL中的俱乐部成员排序俱乐部

时间:2017-06-30 18:03:14

标签: mysql sql ruby-on-rails mysqli

我有一个rails应用程序,其中我有2个桌子......俱乐部和俱乐部会员......

俱乐部有很多俱乐部成员 俱乐部成员属于俱乐部...... 我将提供表格列的截图

enter image description here

我的俱乐部成员使用club_id外键引用俱乐部

我想根据俱乐部成员的最大数量来找出俱乐部...... 我正在使用这样的查询..但这不起作用..任何人都可以根据俱乐部成员的数量帮助我订购俱乐部吗?

我当前的查询

<textarea id="given"></textarea>
<p>your input:</p>
<div id="typed" contentEditable="true"></div>

2 个答案:

答案 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创建/更新/销毁数据时,此操作才有效。如果任何其他系统修改数据或进行直接数据库编辑,它将不会触发回调,也不会更新计数器缓存。