在Rails 4.0中,我有這個表,我想按照location_id的出現次數對它進行排序。在這種情況下,最流行的location_id是3.我想按照降序對我的表進行排序,從頂部帶有location_id:3的所有記錄開始。按數據庫中發生的次數排序記錄
表Geochecks-
┌────┬─────────┬─────────────┬─────────────────────┬────────────────────┬─────────────────────┐
│ id │ user_id │ location_id │ message │ created_at │ updated_at │
├────┼─────────┼─────────────┼─────────────────────┼────────────────────┼─────────────────────┤
│ 1 ╎ 14 ╎ 2 ╎ Test test t ╎ 2013-07-23 13:3... ╎ 2013-07-23 13:37... │
│ 2 ╎ 12 ╎ 3 ╎ ╎ 2013-07-23 13:5... ╎ 2013-07-23 13:54... │
│ 3 ╎ 15 ╎ 2 ╎ <html lang="en" ... ╎ 2013-07-25 08:5... ╎ 2013-07-25 08:57... │
│ 4 ╎ 12 ╎ 3 ╎ Ohohohooh ╎ 2013-07-25 11:3... ╎ 2013-07-25 11:37... │
│ 5 ╎ 12 ╎ 3 ╎ Pff kjasakljdfas... ╎ 2013-07-25 11:3... ╎ 2013-07-25 11:37... │
│ 6 ╎ 15 ╎ 4 ╎ ╎ 2013-07-25 13:5... ╎ 2013-07-25 13:54... │
│ 7 ╎ 13 ╎ 4 ╎ dasfdasfdasfdasf ╎ 2013-07-25 14:3... ╎ 2013-07-25 14:30... │
│ 8 ╎ 13 ╎ 3 ╎ ╎ 2013-07-25 14:3... ╎ 2013-07-25 14:30... │
│ 9 ╎ 13 ╎ 2 ╎ Test check message ╎ 2013-07-25 14:3... ╎ 2013-07-25 14:31... │
│ 10 ╎ 13 ╎ 5 ╎ asdfdasfdasfdasfa ╎ 2013-07-25 14:4... ╎ 2013-07-25 14:42... │
│ 11 ╎ 16 ╎ 7 ╎ Hohohooh ╎ 2013-07-26 07:5... ╎ 2013-07-26 07:50... │
└────┴─────────┴─────────────┴─────────────────────┴────────────────────┴─────────────────────┘
我知道如何指望他們在由前:Geochecks.where(location_id: 3).count #=> 4
,想着一個循環會做.where().count
請求通過整個表,之後比較結果找到最大的一個,但我確信有一個更聰明的解決方案。
期望的輸出:期望的輸出應該是降序的location_id列表。在這種情況下,它應該是:3, 2, 4, 5, 7
我認爲你需要有一個SQL查詢,你首先執行組,計數和順序,然後再把這個查詢的結果連接到表中,以便將它用作一個順序。 –
我不太瞭解SQL查詢。你能否給我提供任何例子?謝謝 –
這就是要點。如果你不知道如何去做,我會鼓勵你先學習SQL。做你不明白的事情是不行的。你可以嘗試一下,使用Rails執行此操作,讓我寫一個答案。 –