Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jedno SQL, pobranie listy artykułów z pierwszym zdjęciem - LEFT JOIN
Forum PHP.pl > Forum > Bazy danych
adbacz
Posiadam dwie tabele - artykuły i zdjęcia. Artykuł posiada wiele zdjęć - powiązane są ID artykułu. Potrzebuję w jednym zapytaniu (dla szybkości wykonania) pobrać listę tych artykułów, ale wraz z pierwszym zdjęciem, jakie przypisane jest do tego artykułu (sortowanie po "ordering") - najmniejszy ordering, oznacza pierwsze zdjęcie.

Normalnie wykonałbym to zapytaniem po wszystkie artykuły, i osobnymi zapytaniami po główne zdjęcie dla każdego artykułu, ale jeśli artykułów będzie 1000, to będe miał 1001 zapytań do bazy, a tego bym chciał uniknąć.

Tabela: artykuły
Kod
id | title | content

Tabela: zdjęcia
Kod
id | article_id | filename | ordering
nospor
A nie mozesz w tabeli ze zdjeciami dodac kolejnej kolumny, ktora bedzie okreslac czy dane zdjecie jest DEFAULT czy nie?
mmmmmmm
  1. SELECT a.*, f.filename FROM articles a LEFT JOIN photo f ON f.article_id=a.id AND f.ordering=1

Założenie: najmniejszy ordering to 1.
Ale z LEFT JOIN to to wcale takie szybkie nie będzie.
nospor
Cytat
Ale z LEFT JOIN to to wcale takie szybkie nie będzie.
Bez przesady. Uzywam tego w paru projektach i jakos nie zuwazylem by mulilo w jakikolwiek sposob
adbacz
Dziękuję za odpowiedzi. Niestety, nie mam pewności, że zawsze tylko jeden obrazek będzie miał taki ordering. Będę musiał zmodyfikować skrypt jak radzi nospor.
trueblue
  1. SELECT a.nazwa, SUBSTRING_INDEX(GROUP_CONCAT(z.zdjecie ORDER BY z.id_zdjecie ASC),',', 1) AS zdjecie
  2. FROM artykul AS a
  3. LEFT JOIN zdjecie AS z ON a.id_artykul=z.id_artykul
  4. GROUP BY a.id_artykul


  1. ORDER BY z.id_zdjecie ASC
decyduje o tym według jakiego klucza wybierasz zdjęcie.
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.