Wycinek Tabeli:
id | id_y | lastdate
1 | 1 | 2009-09-09 10:10:01
2 | 3 | 2009-09-08 10:10:01
3 | 1 | 2009-09-07 10:10:01
4 | 1 | 2009-09-07 10:52:01
5 | 2 | 2009-09-08 10:20:01
6 | 2 | 2009-09-07 10:11:01
7 | 3 | 2009-09-05 10:11:01
I teraz jak skonstruować zapytanie do BD posortowaną tablicę wg 'lastdate' pobrać po dwa elementy z kolumny 'id_y'.
Rozwiazania które przychodzą mi do głowy to:
1) pobrac całą tabelę, a potem odpowiednio na warunkach porozdzielać po te dwa elementy - co wydaje mi się trochę bezsensowne, tymbardziej kiedy kolumna 'id_y' będzie zawierała 4 identyfikatory (1,2,3,4) to tych elementów potrzebuje tylko 8, więc nie ma sensu wczytywać całej bazy kiedy wszystkich rekordów będzie z 200.
2) skonstruować 4 zapytania
Kod
"SELECT * FROM nazwa_tabeli WHERE id_y=1 ORDER BY lastdate DESC LIMIT 2"
zmieniając tylko 'id_y'. Też rozwiązanie troche bezsensowne bo po co wykonywać aż 4 zapytania?3) skonstruować jedno zapytanie - ale jak ? (i tytaj brakuje mi wiedzy by to zrobić).Chyba udało mi się to skonstruować, jednak czy mógłby mi to ktoś potwierdzić, że będzie działać w każdym przypadku, bo z tego co sprawdząłem to jak narazie działa.
Kod
(SELECT * FROM table WHERE id_y=1 ORDER BY lastdate DESC LIMIT 2) UNION
(SELECT * FROM table WHERE id_y=2 ORDER BY lastdate DESC LIMIT 2) UNION
(SELECT * FROM table WHERE id_y=3 ORDER BY lastdate DESC LIMIT 2) UNION
(SELECT * FROM table WHERE id_y=4 ORDER BY lastdate DESC LIMIT 2)
(SELECT * FROM table WHERE id_y=2 ORDER BY lastdate DESC LIMIT 2) UNION
(SELECT * FROM table WHERE id_y=3 ORDER BY lastdate DESC LIMIT 2) UNION
(SELECT * FROM table WHERE id_y=4 ORDER BY lastdate DESC LIMIT 2)
Puki co sprawdzałem i zwróci mi 8 elementów po dwa każdego rodzaju posortowane wg daty ostatniej modyfikacji.