Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql]Jak zbudować zapytanie?
Forum PHP.pl > Forum > PHP
demoniczny
No mam znów problem ;/
posiadam w bazie 3 tabele

są relacje tabela = łączenie = tabela

  1. cars
  2. id | nazwa
  3.  
  4. cars_race
  5. id | idcars | idrace
  6.  
  7. races
  8. id | nazwa | text itp...


I do races przynalezy kilka wyników z cars...
wyjaśnie to obrazowo

  1. cars
  2. 1 | honda
  3. 2 | suzuki
  4. 3 | skyline
  5.  
  6. cars_race
  7. 1 | 1 | 1
  8. 2 | 2 | 1
  9. 3 | 3 | 1
  10.  
  11. races
  12. 1 | wyscig o zlote majtki | kto wygra dostaje je


I chciał bym w jednym zapytaniu pobrać wszystkie auta które należą do wyścigu. I wsadzić je jakoś do tabily. Aby w jednym okrążeniu foreach wyciągnąć je wszystkie

Mógł by ktoś pomóc. Totalnie nie wiem za co się zabrać jak powinno wyglądać zapytanie
phpion
Poczytaj o złączeniach czyli o klauzuli JOIN.
demoniczny
Powiem ci że jeśli chodzi o join to dość u mnie tylko że problem w tym jak pobrać wszystkie 3 rekordy za jednym razem i wsadzić do tablicy?
demoniczny
Wiesz raczej mi twoje zapytanie nic nie pomaga tak jak napisał phpion tutaj jeszcze muszą być łączenia ale nie wiem zabardzo jak potem wyciągnąć wszystkie wyniki(auta) pasujące do wyścigu dla każdego obkrążenia pętli.
thek
Czyli jednak NIE rozumiesz złączeń, bo JOIN robi dokładnie to co chcesz. Bierzesz sobie cars_race i łączysz z cars oraz określasz jaki race Cię interesuje. Tu masz raptem jeden JOIN by połaczyć i jeden WHERE by okreslić wyścig. Zapytanie do tego utworzone ma długość mniejszą niż Twój post, w którym piszesz, że rozumiesz złączenia smile.gif Uwierz, że to jest NAJPROSTSZA forma złączenia możliwa i jest wręcz podręcznikowa! Każdy tutorial od podobnej zaczyna.
demoniczny
Dobra i jak to wsadzic do tablicy aby wygladało tak:

Wyscig => honda, suzuki (Aby 2 wyniki były przy 1 wyscigu.)
thek
A o GROUP BY słyszał czy akurat spał? Widzę, że bez gotowca sie chyba nie obejdzie:
  1. SELECT r.nazwa, GROUP_CONCAT(c.nazwa) AS auta
  2. FROM cars_race AS cr
  3. LEFT JOIN races AS r ON cr.idrace = r.id
  4. LEFT JOIN cars AS c ON cr.idcars = c.id
  5. GROUP BY cr.idrace

i w wyniku otrzymasz JEDEN wiersz dla KAŻDEGO wyścigu:
Kod
nazwa => 'wyscig o zlote majtki', auta => 'honda,suzuki,skyline'

Ale możesz też dać
  1. SELECT r.nazwa, c.nazwa AS auto
  2. FROM cars_race AS cr
  3. LEFT JOIN cars AS c ON cr.idcars = c.id
  4. WHERE cr.idrace = 1
i dostaniesz TYLE wierszy dla każdego wyścigu, ILE było w nim samochodów:
Kod
nazwa => 'wyscig o zlote majtki', auto => 'honda'
nazwa => 'wyscig o zlote majtki', auto => 'suzuki'
nazwa => 'wyscig o zlote majtki', auto => 'skyline'
I to drugie opisałem Ci w swoim poście wyżej, ale w kolejnym napisałeś już coś innego jako przykład i to jest to co jako pierwsze dałem. I nie nie da się tak, by było tyle kolumn w wierszu wyścigu ile samochodów i było to wydajne, bo jeden wyścig będzie miał 5, a inny 2 i co? Co wstawisz do pozostałych kolumn w tym, gdzie są tylko 2 auta? Nulle? Zły pomysł. Lepiej wrzucić to do jednej i sobie już po stronie skryptu php obrobić jak chcesz. Przynajmniej bazy nie zarżniesz jakimiś cudacznymi zapytaniami.

Jak widzisz to samo uzyskałem na 2 sposoby, ale każdy z nich kładzie nacisk na coś innego i tylko od tego zależy które będzie użyte. A co innego można było wyczytać w Twoim pierwszych i kolejnych postach jako sens zapytania. Ba... Nawet po ostatnim poście trudno wnioskować jaka ma być struktura wyniku.
Czy ma to być:
  1. 1 => array( 'name' => 'wyscig o zlote majtki', 'cars' => 'honda,suzuki,skyline' ),
  2. 2 => array( 'name' => 'wyscig inny', 'cars' => 'honda,skyline' )
  3. );
lub
  1. 1 => array( 'name' => 'wyscig o zlote majtki', 'cars' => array( 'honda', 'suzuki', 'skyline' ) ),
  2. 2 => array( 'name' => 'wyscig inny', 'cars' => array( 'honda', 'skyline' ) )
  3. );

Czy może zawsze będzie to jeden wyścig i forma
  1. array( 'name' => 'wyscig o zlote majtki', 'cars' => array( 'honda', 'suzuki', 'skyline' ) );
lub
  1. array( 'name' => 'wyscig o zlote majtki', 'cars' => 'honda,suzuki,skyline' );

Tak więc trudno zasugerować Ci sensowne rozwiązanie, skoro nawet nie w pełni wiadomo czego chesz w wyniku. Gdyby nie ostatni post to można by zgadywać o co Ci chodzi z tym wkladaniem do tablicy.

Zresztą nawet teraz tylko zgaduję i dałem Ci aż CZTERY warianty tego o co pytałeś. Tak nieprecyzyjnie wypowiedziałeś się. I to jest problem piszących tutaj pytania. DLA NICH pytanie jest proste, ale dla odpowiadających i zaawansowanych userów oznacza to nieraz X możliwości odpowiedzi, nieco różniących się, a co za tym idzie, nieraz zupełnie inaczej możliwych do uzyskania.
demoniczny
. tongue.gif Chyba jednak zrobię tak jak piszesz ze auta będę trzymał w jednej kolumnie

Dziękuje bardzo za pomoc ^^
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.