Итак, у меня есть модель Story
и Share
. Story
принадлежит_ Share
, а Share
has_one Story
. У них обоих есть метки времени. Share
является самореферентным, поэтому в нем есть столбец parent_id
, и иногда одна часть будет вложена в другую. И это не бесконечно многократно, просто на один уровень ниже.
Изначально я только что сортировал по столбцу created_at
в Story
. Но теперь мне нужно сделать что-то более сложное. Если у Story
есть Share
или вложенные акции, я бы тоже хотел отсортировать их по столбцам created_at
. Идея заключалась в том, что дальнейшая активность на этом Story
(вложенные акции) повысила бы его до вершины ордера.
РЕДАКТИРОВАТЬ: Вот решение:
SELECT * FROM stories
LEFT OUTER JOIN shares AS s1 ON stories.share_id = s1.id
LEFT OUTER JOIN shares AS s2 ON s2.parent_id = s1.id
ORDERY BY s2.created_at DESC NULLS LAST, stories.created_at DESC
Или в ActiveRecord:
Story.joins('LEFT OUTER JOIN shares AS s1 ON stories.share_id = s1.id').
joins('LEFT OUTER JOIN shares AS s2 ON s2.parent_id = s1.id').
order('s2.created_at DESC NULLS LAST, stories.created_at DESC')
Спасибо за помощь!