![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kompletnie nie potrafię pojąć wszelkich złączeń w mysql, mam takie tabele:
wykonawcy:
utwory:
ile_grane:
Mogę poprosić o pomoc w złożeniu zapytania które wyciągnie mi takie dane w jednym zapytaniu mysql?
Może jakoś na gotowym przykładzie, na własnych danych łatwiej to rozgryzę. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 73 Pomógł: 9 Dołączył: 14.01.2010 Ostrzeżenie: (0%) ![]() ![]() |
Laczysz zapytanie w jedno z kilku tabel za pomoca join
Przykład: http://webmaster.helion.pl/index.php/kursm...wynikow-zapytan Albo najlepiej wybierz sobie cos google |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
takim zapytaniem z dwóch tabel mi się udało wyciągnąć dane i dopasować wykonawce do utworu ale nie mogę wpaść na to jak skonstruować to zapytanie żeby teraz zobaczyć dodatkowo dane na temat tych utworów z tabeli 'ile_grane'. |
|
|
![]()
Post
#4
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No to czemu przy pomocy JOIN nie dodasz kolejnej interesujacej cie tabeli?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
dodałem JOIN ile_grane as ig i dostaje #1054 unknown column 'wykonawca_id' in 'from clause' a jak dam w usign utwor_id to dostaje wynik ale jak jest 2 wykonawców to wyświetla 2 wiersze i wygląda to mniej więcej tak:
a do wykonawcy 2 nie ma przypisanego żadnego utworu |
|
|
![]()
Post
#6
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
....
Pokaz kod po zastosowaniu JOIN jak ci pisalem. SKadm mam wiedziec co zepsules.... wrozyc mam? |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
proszę, cała zawartość przykładowej bazy łącznie z problematycznym zapytaniem:
wynik zapytania wyexportowany do tablicy PHP: |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
robisz JOIN na wykonawcy, ale nie mowisz po jakim polu i z czym go laczysz.... nic wiec dziwnego ze taki wypadku baza zwraca ci wszelkie mozliwe kombinacje. Zawsze musisz laczyc jakims polem tabele.
I poczytaj o ON, ktore jest bardziej czytelne od USING ps: a jaki w ogole sens ma tabela ile_grane? Czemu poprostu nie zrobisz w tabeli utwor kolejnego pola? |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
Tam faktycznie można było sobie odpuścić tabele ile_grane i wrzucić te dane w tabele utwor i tak tez zrobiłem, ale trochę zmieniłem koncepcje i teraz w oddzielnej tabeli 'kiedygrane' trzymam dane na temat statystyk kiedy był grany dany utwór
poniższe zapytanie chyba działa ok, ale pytanie czy jest optymalne, bo w oryginale ma działać na dużo większej bazie, każda z tabel ma więcej kolumn (utwory: ~25000 rekordów; wykonawcy:~7000 rekordów; kiedygrane:~120000 rekordów)
Wynik zapytania wyeksportowany do tablicy php:
Ten post edytował @rtur 25.11.2013, 21:59:58 |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Skoro type to 1 lub 0 to powinnno to byc tinyint a nie int.
Skoro chcesz optymalnosci to czas najwyzszy zainsteresowac sie czyms takim jak INDEKSY |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 254 Pomógł: 3 Dołączył: 23.02.2006 Ostrzeżenie: (0%) ![]() ![]() |
nieźle, przy ~79000 rekordów w tabeli 'kiedygrane' index na 2 pola i z wyniku:
daje wynik w granicy dzięki (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 03:52 |