Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: select z tabeli jeden do wielu
Forum PHP.pl > Forum > Bazy danych > MySQL
Gribo
Witam,
Mam beze
  1. CREATE TABLE auto (
  2. id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. nazwa VARCHAR NULL,
  4. PRIMARY KEY(id)
  5. );
  6.  
  7. CREATE TABLE auto_czesc (
  8. auto_id INTEGER UNSIGNED NULL,
  9. czesc_id INTEGER UNSIGNED NULL,
  10. INDEX auto_czesc_FKIndex1(auto_id),
  11. INDEX auto_czesc_FKIndex2(czesc_id),
  12. FOREIGN KEY(auto_id)
  13. REFERENCES auto(id)
  14. ON DELETE NO ACTION
  15. ON UPDATE NO ACTION,
  16. FOREIGN KEY(czesc_id)
  17. REFERENCES czesc(id)
  18. ON DELETE NO ACTION
  19. ON UPDATE NO ACTION
  20. );
  21.  
  22. CREATE TABLE czesc (
  23. id INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  24. nazwa VARCHAR NULL,
  25. ikona VARCHAR NULL,
  26. PRIMARY KEY(id)
  27. );


i mam pytanie cche stworzyc liste 10 aut wraz z częściami im przypisanymi czy da rade wyciągnąć wszytsko w 1 zapytaniu sql ? bo teraz robie to tak że najpierw pobieram wszytskie samochody a potem pobieram po id samochodu części z tabeli auto_czesc i joinem dołączam nazwe i ikone z tabeli czesc, ale rzy liście np. 10 samochodów wychodzi 11 zapytań do bazy. Istnieje jakiś lepszy sposób ?
Mchl
Masz zdefiniowane klucze obce, to zrób na nich joiny.

Kod
SELECT a.nazwa, c.nazwa AS czesc, c.ikona FROM auto AS a INNER JOIN auto_czesc AS a_c ON a.id = a_c.auto_id INNER JOIN czesc AS c ON c.id = a_c.czesc_id
Gribo
no ale w ten sposób dostane wyniki z powtarzającą się nazwą auta czyli np.
subaru silnik
subaru hamulec

a da się zrobić żeby dostać coś takiego: subaru, silnik,hamulec .... ?
askone
Nie da się z prostego powodu. Wynik zapytania zwracany jest w postaci połączonych rekordów, a każda część to osobny rekord więc wynik jest taki jaki jest. Nie wiem w czym miałoby Ci to przeszkadzać, przecież w skrypcie możesz nadmiarowe dane odrzucić...

Pozdro
Mchl
Da się: GROUP_CONCAT
phpion
Algorytm wygląda mniej-więcej tak:
Kod
pętla po wszystkich rekordach
    jeżeli aktualne auto jest różne od poprzednio wyświetlanego
        wyświetl nazwę auta
        zaktualizuj zmienną przechowującą nazwę auta poprzednio wyświetalnego
    w przeciwnym wypadku
        nie rób nic

    wyświetl informacje o aktualnej części

Dzięki temu uzyskasz efekt (przykładowo):
Kod
subaru:
hamulec
lusterko

suzuki:
kołpak
kierunkowskaz

czyli to, o co Ci chodzi.
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.