Cześć
Mam dwie tabele (baza mssql): Doc(Id, CreationDate, Title)
i Message(Id, CreationDate, Message)
. Muszę zrobić paginację z połączonych danych, z tych dwóch tabel w stylu "pokaż więcej". Jedynym sensownym rozwiązaniem jakie przychodzi mi do głowy jest filtrowanie po creationDate np.
-- zapytanie pobierające kolejna stronę (rekordy starsze od tych z poprzedniej strony)
select x.*
from (
select x.Id, x.CreatedAt, 'Doc' as ActType
from dbo.[Doc] x
where x.CreatedAt < '2016-01-15 07:30:00'
union all select x.Id, x.CreatedAt, 'Message' as ActType
from dbo.[Message] x
where x.CreatedAt < '2016-01-15 07:30:00'
) as x
order by x.CreatedAt desc, x.Id desc, x.ActType desc
offset 0 rows
fetch first 6 rows only
Jednak jest szansa (niska ale jest), że Doc i Message będą miały rekordy z tą samą datą, przez co niektóre rekordy mogą się w ogóle nie wyświetlić w wynikch.
Inne opcje:
- synchronizacja dwóch tabel w innej tabeli, w której przydzielane byłyby unikalne id (taki pseudo indexed view) - czasochłonne
- dynamiczne przydzielanie unikalnych id przez row_count() - wolne
Macie jakieś pomysły jakby to inaczej rozwiązać? Czy może nie przejmować się tym na razie bo takie przypadki będą rzadkie?