Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql]Jak zbudować zapytanie?
demoniczny
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 18.07.2011

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


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

Ten post edytował demoniczny 21.07.2011, 22:10:43
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.10.2025 - 07:10