psw779
8.03.2009, 16:26:45
Witam!
Mam taki problem:
Dwie tabele MySQL:
1: ALBUMS z polami ID, TIMESTAMP, TITLE
2: PICTURES z polami: ID, IDA, TIMESTAMP, FILENAME, TITLE
Chcę wyciągnąć jednym zapytaniem takie informacje:
Listę ostatnio dodanych, dziesięciu albumów z doklejoną informacją o najnowszym zdjęciu w tym albumie (data, nazwa pliku i tytuł). Jeśli w albumie nie istnieje żadne zdjęcie ma on się też znajdować na liście a pola z info o fotce zostają puste.
Próbowałem już na wszystkie sposoby ale nie potrafię. Zwracam uwagę na wydajność zapytania - w tabelach jest około 100k zdjęć i 3k albumów.
Pozdrawiam
sowiq
8.03.2009, 16:33:36
Ja bym to zrobił tak:
SELECT a.*, p.timestamp AS obrazek_time, p.filename AS obrazek_plik, p.title AS obrazek_nazwa
FROM albums a
LEFT JOIN (SELECT * FROM pictures GROUP BY ida ORDER BY timestamp DESC) p ON (p.ida = a.id)
LIMIT 10
(pisane z palca, niekoniecznie zadziała od razu)
Cytat
w tabelach jest około 100k zdjęć i 3k albumów
To wg. Ciebie dużo?
psw779
8.03.2009, 17:22:18
Jest bardzo fajnie z tym, że zapytanie wyciąga pierwsze zdjęcie dodane do danego albumu a nie ostatnie...
I jeszcze jedna sprawka, czy dało by się to rozszerzyć o sumę zdjęć w danym albumie?
sowiq
8.03.2009, 18:29:48
Da się.
SELECT a.*,
p.timestamp AS obrazek_time,
p.filename AS obrazek_plik,
p.title AS obrazek_nazwa,
COUNT(p2.ida) AS ile_zdjec
FROM albums a
LEFT JOIN (SELECT * FROM pictures GROUP BY ida ORDER BY timestamp DESC) p ON (p.ida = a.id)
LEFT JOIN pictures p2 ON (p2.ida = a.id)
GROUP BY (a.id)
LIMIT 10
psw779
8.03.2009, 19:29:20
Jest wypas, na prawdę jestem pod wrażeniem tylko do pełni szczęścia brakuje mi aby działał ORDER BY timestamp DESC który notabene chyba powinien stać za GROUP BY ida a nie przed.
W ogóle nie reaguje na żadną kolumnę: ORDER BY timestamp DESC daje to samo co np. ORDER BY title DESC
trochę dziwne?
kefirek
8.03.2009, 19:36:49
Daj group by daj
ORDER BY obrazek_time DESC LIMIT 10
psw779
8.03.2009, 19:57:33
Cytat(kefirek @ 8.03.2009, 19:36:49 )

Daj group by daj
ORDER BY obrazek_time DESC LIMIT 10
chodzi o podzapytanie a nie całość
sowiq
8.03.2009, 20:27:33
Cytat(psw779 @ 8.03.2009, 19:29:20 )

brakuje mi aby działał ORDER BY timestamp DESC który notabene chyba powinien stać za GROUP BY ida a nie przed
Masz rację. Jak pisałem - nie sprawdzałem zapytania, pisałem je z palca. Już poprawiam swój kod.
psw779
9.03.2009, 10:06:18
to była prosta sprawa przestawić ale martwi mnie ten ORDER BY w podzapytaniu, nawet gdy tam wsadzę RAND() to i tak zawsze mam to samo zdjęcie doklejone...
nospor
9.03.2009, 10:09:33
Cytat
ostatni ratunek w tym forum...
Proszę poprawić tytuł na właściwy. Twoja historia szukania pomocy w tytule nas nie interesuje
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.