Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] sklejenie dwóch tabel, problem order by
Forum PHP.pl > Forum > Bazy danych > MySQL
psw779
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
Ja bym to zrobił tak:
  1. SELECT a.*, p.timestamp AS obrazek_time, p.filename AS obrazek_plik, p.title AS obrazek_nazwa
  2. FROM albums a
  3. LEFT JOIN (SELECT * FROM pictures GROUP BY ida ORDER BY timestamp DESC) p ON (p.ida = a.id)
  4. 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? smile.gif
psw779
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
Da się.
  1. SELECT a.*,
  2. p.timestamp AS obrazek_time,
  3. p.filename AS obrazek_plik,
  4. p.title AS obrazek_nazwa,
  5. COUNT(p2.ida) AS ile_zdjec
  6. FROM albums a
  7. LEFT JOIN (SELECT * FROM pictures GROUP BY ida ORDER BY timestamp DESC) p ON (p.ida = a.id)
  8. LEFT JOIN pictures p2 ON (p2.ida = a.id)
  9. GROUP BY (a.id)
  10. LIMIT 10
psw779
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
Daj group by daj
  1. ORDER BY obrazek_time DESC LIMIT 10
psw779
Cytat(kefirek @ 8.03.2009, 19:36:49 ) *
Daj group by daj
  1. ORDER BY obrazek_time DESC LIMIT 10


chodzi o podzapytanie a nie całość
sowiq
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
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
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.