Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Jak uzyskać DISTINCT na jednej z kolumn?, przy złączeniu LEF JOIN
Przemek1
post
Post #1





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.11.2005

Ostrzeżenie: (0%)
-----


Witam! Mam taki problem!
Wybieram rekordy z tabel: "artykuly" i "zdjecia". Nie wszystkie artykuły mają odpowiadające im zdjęcia dlatego stosuję LEFT JOIN, żeby nie "pogubić" artykułów bez zdjęć. Z kolei część artykułów ma więcej niż jedno zdjęcie, co powoduje powstawanie dodatkowych wierszy z tym samym artykułem i różnymi zdjęciami. Zależy mi, żeby mieć dokładnie tyle wierszy ile jest artykułów, i do każdego z nich kolumnę z pierwszym znalezionym zdjęciem, lub NULL, jeśli nie ma zdjęcia.
  1. SELECT artykuly.*, zdjecia.nazwa_pliku
  2. FROM artykuly
  3. LEFT JOIN zdjecia ON zdjecia.art_id = artykuly.id

DISTINCT nie pomaga, bo uzyskane wiersze różnią się "zdjecia.nazwa_pliku". Próbowałem też zrobić wersję z podzapytaniem:
  1. SELECT artykuly.*, zdjecia.nazwa_pliku
  2. FROM artykuly
  3. LEFT JOIN (SELECT zdjecia.*
  4. FROM zdjecia,
  5. artykuly WHERE zdjecia.art_id = artykuly.id LIMIT 1) AS zdjecia ON zdjecia.art_id = artykuly.id


Ale to nie działa, bo podzapytanie wybiera pierwsze lepsze zdjęcie z tabeli, które później nie jest dołączane, bo nie pasuje do odpowiedniego artykułu.

Czy jest jakieś proste (albo skomplikowane) rozwiązanie, żeby zrobić limit wybranych wierszy poprzez unikalność kolumny - czyli u mnie a.id?
Będę wdzięczny za wszelką pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  1. SELECT artykuly.*, zdjecia.nazwa_pliku
  2. FROM artykuly
  3. LEFT JOIN zdjecia ON zdjecia.art_id = artykuly.id GROUP BY artykuly.id
Go to the top of the page
+Quote Post
Przemek1
post
Post #3





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 7.11.2005

Ostrzeżenie: (0%)
-----


Wielkie dzięki za pomoc! Dokładnie o to mi chodziło. Znowu się czegoś nauczyłem.
Dziękuję bardzo i pozdrawiam!
Przemek
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:21