我有一個簡單的User
和Donations
之間的關係,因爲用戶有很多捐款,捐款屬於一個用戶。 我想要做的是獲得最近捐款訂購的用戶列表。加入和訂單的不同記錄
這裏就是我想:
首先,我想uniq的用戶總數,這是按預期工作:
> User.joins(:donations).order('donations.created_at').uniq.count
(3.2ms) SELECT DISTINCT COUNT(DISTINCT "users"."id") FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id"
=> 384
接下來,當我刪除count
方法,我得到一個錯誤「ORDER BY表達式必須出現在選擇列表」:
> User.joins(:donations).order('donations.created_at').uniq
User Load (0.9ms) SELECT DISTINCT "users".* FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at
PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...ON "donations"."user_id" = "users"."id" ORDER BY donations....
然後我試圖通過明確設置搜索固定Postgres的錯誤克SELECT子句乍一看似乎工作:
> User.select('DISTINCT "users".id, "users".*, "donations".created_at').joins(:donations).order('donations.created_at')
User Load (17.6ms) SELECT DISTINCT "users".id, "users".*, "donations".created_at FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at
然而,回到不考慮DISTINCT語句,並記錄數返回692個記錄:
> _.size
=> 692
我如何獲得預期的結果數量(384),同時按捐贈的created_at時間戳排序?
我想當你說'DISTINCT「users」.id,「users」。*,「donations」.created_at'服務器將其解釋爲:每個元素的一個結果在其所有字段中是唯一的 – juanpastas