Получать данные из нескольких таблиц и сортировать их по времени - PullRequest
0 голосов
/ 17 ноября 2009

Я создаю страницу, на которой я хочу сделать страницу истории. Поэтому мне было интересно, есть ли способ извлечь все строки из нескольких таблиц, а затем отсортировать по их времени? В каждой таблице есть поле с именем "creation_at".

Так есть ли способ извлекать данные из всех таблиц и сортировать их, если бы Rails не сортировал их из меня?

Ответы [ 3 ]

1 голос
/ 17 ноября 2009

Вы можете получить лучший ответ, но я бы предположил, что вам потребуется

  1. Создайте таблицу History со столбцом даты Created, автоматически сгенерированным столбцом Id и любым другим содержимым, которое вы хотите отобразить [например, Name, Description]
  2. Измените все таблицы, которые генерируют элемент "истории", чтобы использовать эту новую таблицу через отношение внешнего ключа на History.Id

«Смешение» таблиц [то есть объединение разных наборов результатов в один набор результатов] - очень сложная проблема, но вы все равно эффективно выполняете все вышеперечисленное - просто на уровне приложений, так почему бы не сделать это правильно и более эффективно на уровне данных.

Надеюсь, это поможет:)

0 голосов
/ 17 ноября 2009

Вам нужно выполнить sql как:

Выбор * из таблицы по порядку созданного_оценки

: сохранить это в массив. Сделайте это для каждого из источников данных, а затем выполните сортировку слиянием для всех массивов в Ruby. Конечно, это будет хорошо работать для небольших наборов данных, но как только вы получите большой набор данных (т.е. больше, чем уместится в память), вам придется использовать другой алгоритм сбора / слияния.

Так что я полагаю, что ответ заключается в том, что вам нужно выполнить какой-нибудь Ruby, если вы не прибегаете к методу Union, описанному в другом ответе.

0 голосов
/ 17 ноября 2009

В зависимости от того, находятся ли все эти базы данных на одном компьютере или нет:

На том же компьютере: используйте операторы OrderBy и UNION в sql для возврата набора результатов

На разных компьютерах: вы можете проверить это на производительность, но вы можете использовать связанные серверы и UNION, ORDER BY. В качестве альтернативы, вы можете получить ruby ​​для получения результатов из каждой базы данных, а затем объединить их и отсортировать

РЕДАКТИРОВАТЬ: из вашего последнего комментария о разных таблицах, а не БД; используйте что-то вроде этого:

SELECT Created FROM table1
UNION
SELECT Created FROM table2
ORDER BY created
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...