나는 데이터의 세 개의 테이블이 있습니다세 개의 데이터 테이블을 페이징?
table: cars [10,000 rows]
table: planes [2,000 rows]
table: trains [50 rows]
나는 사용자에게 같은 세 개의 테이블에서 가져온 데이터의 페이지를 표시 할 수 있도록하고 싶습니다
:
car
plane
train
car
plane
train
...
요점은 그들이 할 수 있다는 것을 각 테이블이 다 소모 될 때까지 각 유형 중 하나를보고 페이징을 유지합니다. 예를 들어 어느 시점에서 각 페이지는 자동차 테이블을 포함하기 전에 비행기와 열차 테이블이 소진 될 때만 차량을 포함합니다.
한도에 도달 할 때까지 각 테이블에서 한 행을 가져올 수있는 쿼리가 있습니까? 그리고 내가 할 수있는
id | type | description | dummy_integer
--------------------------------------------
... car ... 0
... plane ... 1
... train ... 2
... car ... 3
... plane ... 4
... train ... 5
... ... ... ...
... car ... 8000
... car ... 8001
... car ... 8002
... ... ... ...
: 뭔가 같은 : 내가 그들을 삽입으로
SELECT * FROM cars, planes, trains ORDER BY (natural row ordering?) LIMIT 20;
나는이 작업이 완료 얻을 생각할 수있는 유일한 방법은 하나 개의 마스터 테이블을 만들고, 각 행에 더미 정수를 할당하는 것입니다
SELECT * FROM master_table ORDER BY dummy_integer ASC LIMIT 20;
및 페이징은 마지막에서 볼 dummy_integer 사용하여 수행됩니다 : 할
SELECT * FROM master_table WHERE dummy_integer > 20
ORDER BY dummy_integer ASC LIMIT 20;
을
예를 들어 새로운 열차 레코드를 얻을 때 master_table의 끝 부분에 추가 할 수 있지만 더미 정수 값을 사용하면 끝까지 줄 수 있습니다. 따라서 사용자가 처음부터 내 페이지를보고 시작하면 전방으로 차량/비행기를 멋지게 삽입하는 대신 자동차 사막을 통과 할 때까지 새로운 열차 데이터를 볼 수 없습니다.
위의 (좋지 않은) 방법 외에이 작업을 수행하는 좋은 방법이 있습니까?
감사합니다.
세 개의 서로 다른 유니폼 쿼리를 수행하는 것이 트릭보다 빠를 가능성이 높습니다. 프로필을 만드는지 확인하십시오. –