2009-11-17 4 views
0

나는 기록 페이지를 만들고 싶은 페이지를 만들고 있습니다. 그래서 여러 테이블에서 모든 행을 가져온 다음 시간별로 정렬 할 수있는 방법이 있는지 궁금합니다. 모든 테이블에는 "created_at"라는 필드가 있습니다.여러 테이블에서 데이터를 가져 와서 시간순으로 모두 정렬

그래서 모든 테이블에서 가져오고 Rails가 나를 정렬하지 않고 정렬 할 수있는 방법이 있습니까? 당신의 결과가 다른 시스템에

을 설정 돌아가려면 SQL에서 사용있는 OrderBy 및 UNION 문 :

동일한 시스템에

: 이러한 데이터베이스는 모두 동일한 시스템 여부에 여부에 따라

+0

단일 데이터베이스 내에서 여러 데이터베이스 또는 여러 테이블을 의미합니까? –

+0

죄송합니다. 데이터베이스가 아닙니다. – ThoKra

답변

1

당신은 더 나은 답변을 얻을 수 있습니다,하지만 난 당신이 노출하려는 당신은 [A Created 날짜 열, 자동 생성 Id 열 및 다른 내용으로 History 테이블을 작성

  1. 해야 추정 것 예를 들어 Name, Description]
  2. 는에 외래 키 관계를 통해 새로운 테이블을 소비하는 "역사"항목을 생성하는 모든 테이블을 수정 History.Id

"Mashing up"테이블 [다른 결과 세트를 단일 결과 세트로 병합]은 매우 어려운 문제이지만, 어쨌든 위의 방법을 응용 프로그램 계층에서 효과적으로 수행 할 수 있습니다. 그러면 정확하고 효율적으로 수행하십시오. 데이터 레이어에

희망이 있습니다.

+0

이 방법으로 사용하지 않으려하고 있습니다.)하지만이 방법은 가장 쉽고 빠르다고 생각했습니다. – ThoKra

+0

UNION을 사용할 때 새 테이블을 만드는 데 필요한 모든 노력을 기울여야하는 이유는 무엇입니까? –

0

당신은거야 이 성능을 테스트하고 싶지만, Linked Servers와 UNION, ORDER BY를 사용할 수 있습니다. 또는 루비가 각 db에서 결과를 얻은 다음 조합하여 정렬 할 수 있습니다.

EDIT : DB의 테이블이 아니라 다른 테이블에 대한 마지막 코멘트에서. created_at의 증분

에 의해 테이블 ​​순서에서

선택 * :

SELECT Created FROM table1 
UNION 
SELECT Created FROM table2 
ORDER BY created 
0

당신이 좋아하는 SQL을 수행해야합니다 : 이런 식으로 뭔가를 사용하여 배열에 저장합니다. 각 데이터 소스에 대해이 작업을 수행 한 다음 Ruby의 모든 배열에 대해 병합 정렬을 수행하십시오. 물론 이것은 작은 데이터 세트에서는 잘 작동하지만 일단 큰 데이터 세트 (예 : 메모리에 적합 할 때보 다 클 경우)를 얻으면 다른 수집/병합 알고리즘을 사용해야합니다.

다른 답변에서 설명한 Union 방법을 사용하지 않는다면 일종의 Ruby를 수행해야 할 필요가 있다고 생각합니다.

관련 문제