Size: a a a

Чат по руби

2021 February 05

GG

Gleb Grishakov in Чат по руби
e.votes.order(created_at: :desc, :user_id)

неа, синтаксис чет не то)
источник

GG

Gleb Grishakov in Чат по руби
Уже с тимлидом созвонились, раздупляем))
источник

И

Иван in Чат по руби
а ну да, там надо ставить ордер по user_id вначало, но тогда будет неправильная сортировка по времени, и как это сделать без cte чего то в голову не приходит
источник

P

Paul in Чат по руби
Иван
а ну да, там надо ставить ордер по user_id вначало, но тогда будет неправильная сортировка по времени, и как это сделать без cte чего то в голову не приходит
угу, я пока только итеративное решение вижу — дергать по одной записи и надеяться, что десятый юзер не окажется первой записью в votes
источник

DG

Denis Gavrilin in Чат по руби
WITH votes AS (SELECT * FROM votes ORDER BY created_at, user_id DESC) SELECT DISTINCT ON (user_id) * FROM votes;
источник

И

Иван in Чат по руби
Denis Gavrilin
WITH votes AS (SELECT * FROM votes ORDER BY created_at, user_id DESC) SELECT DISTINCT ON (user_id) * FROM votes;
для дистинкст он надо делать ордер обязательно, который поламает сортировку по дате
источник

P

Paul in Чат по руби
мы уже эти грабли прошли тут
источник

DG

Denis Gavrilin in Чат по руби
А сори тогда
источник

P

Paul in Чат по руби
а может просто бахнуть еще одну таблицу?
источник

P

Paul in Чат по руби
и там держать последних проголосовавших
источник

И

Иван in Чат по руби
вот так наверно получится - user_ids = Vote.select("user_id").from(@entry.votes.select("distinct on (user_id) *").order(:user_id, created_at: :desc)).order(created_at: :desc).limit(10)
источник

И

Иван in Чат по руби
вместо cte просто подзапрос в from
источник

GG

Gleb Grishakov in Чат по руби
Иван
вот так наверно получится - user_ids = Vote.select("user_id").from(@entry.votes.select("distinct on (user_id) *").order(:user_id, created_at: :desc)).order(created_at: :desc).limit(10)
ае, это оно)
сеньк!))
источник

GG

Gleb Grishakov in Чат по руби
Ток еще в конце .pluck(:user_id) - и вот наши айдишнички
Спасибо гайз, всем соучастникам)
Иван, спасибо за решение)
источник

И

Иван in Чат по руби
Gleb Grishakov
Ток еще в конце .pluck(:user_id) - и вот наши айдишнички
Спасибо гайз, всем соучастникам)
Иван, спасибо за решение)
ну если прям надо в массив преобразовать с id то да, pluck можешь добавить
источник

И

Иван in Чат по руби
а вообще по идее можно сразу юзеров вытаскивать вместо их ид если пойти немного с другой стороны
источник

GG

Gleb Grishakov in Чат по руби
Иван
а вообще по идее можно сразу юзеров вытаскивать вместо их ид если пойти немного с другой стороны
Интересно было бы, как это?)
источник

И

Иван in Чат по руби
Gleb Grishakov
Интересно было бы, как это?)
как то так
User.select("*")
   .from(User.joins(:votes)
             .select("distinct on (users.id) users.*, votes.created_at as vote_created_at")
             .where(votes: { entry: @entry })
             .order("users.id, votes.created_at desc"))
   .order("vote_created_at desc")
   .limit(10)
источник

И

Иван in Чат по руби
может и проще можно
источник

И

Иван in Чат по руби
Gleb Grishakov
Интересно было бы, как это?)
а постой, как у тебя называется поле в таблице votes которое привзяывается к твоему entry?
источник