假設我有一個Users表,並且每個用戶都有一個country_id(國家列表存儲在另一個表中)。獲取每個國家的居民人數
我想顯示每個國家的列表,有多少成員有,即:
Canada: 16
Romania: 12
USA: 9
我用一些原始SQL,但此舉對Postgres的是凌亂的,所以我想使用更清潔的實施。有沒有一個很好的'高手'的方式去獲得所說的名單?
假設我有一個Users表,並且每個用戶都有一個country_id(國家列表存儲在另一個表中)。獲取每個國家的居民人數
我想顯示每個國家的列表,有多少成員有,即:
Canada: 16
Romania: 12
USA: 9
我用一些原始SQL,但此舉對Postgres的是凌亂的,所以我想使用更清潔的實施。有沒有一個很好的'高手'的方式去獲得所說的名單?
這將返回一個哈希與country_id => count
雙:
@users_by_country = User.group(:country_id).count
#=> { 1 => 104, 2 => 63, ... }
生成的SQL查詢看起來是這樣的:
SELECT COUNT(*) AS count_all, country_id AS country_id FROM `users` GROUP BY country_id
而在你的看法:
<% @countries.each do |country| %>
<%= country.name %>: <%= @users_by_country[country.id] %>
<% end>
雖然你有沒有提供任何細節。所以它很難回答exaclty,但可能這將有助於
User.group(:country_id).count
絕對是。 @斯特凡毆打你一分鐘,所以我必須給他支票,但你會得到讚揚和永恆的感激之情! – opticon
如果你有一個國家模型,你想以不同的方式做到這一點,所以它更可讀,你可以使用.MAP。
Countries.map {| o | {國家:o.name,成員:o.members.count}}
顯然你需要有關聯。如果國家只是用戶的一個領域,那麼這是行不通的。
BR
請分享你已經嘗試了什麼,與表模式 – Cris
ActiveRecord的方法組和計數一起應該是所有你需要在這裏。 –
我所擁有的東西相當複雜(可能過於複雜),所以我想從這裏開始。我確定這是一種相對常見的查詢類型,所以我想要任何和所有的建議!您可以想象,表架構只是一個帶有ID,名稱和country_id列的用戶表,以及具有ID和名稱的國家/地區表。 – opticon