Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySql] Select z 3 tabel, MySql się wiesza
kodereq
post
Post #1





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Witam.

Ma ktoś koncepcję, czemu takie zapytanie zawiesza mi serwer bazy danych ?

  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel AND wypadki.rej = auta.rej


Nawet takie zapytanie powoduje zawiechę:

  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel


Coś takiego natomiast działa w ciągu 0,0033 sek.
  1. SELECT *
  2. FROM auta, osoby
  3. WHERE auta.pesel = osoby.pesel


Tabele są wypełnione małą ilością danych. Można je znaleźć pod linkiem klik! jako materiały do zadania 6 z matury rozszerzonej. Zaznaczam, że powyższe kwerendy są mi potrzebne do podpunktu a).

Ten post edytował kodereq 2.03.2009, 22:54:26
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
JoShiMa
post
Post #2





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


A ile masz tych wierszy w poszczególnych tabelach?

Zapytanie:
  1. SELECT *
  2. FROM auta, osoby, wypadki
  3. WHERE auta.pesel = osoby.pesel


Łączy Ci wiersze z auta i osoby (nie wiem ile Ci takich powiązań wychodzi) a następnie każdy z tych połączonych wierszy łączy z każdym wierszem z tabeli wypadki. Czyli jeśli w tabeli wypadki masz n wierszy a powiązań takich, że auta.pesel = osoby.pesel masz m to to zapytanie tworzy Ci m x n wierszy i to może już być całkiem sporo (u Ciebie w najgorszym wypadku 689x500).

IMO bardziej elegancko, moim zdaniem jest robienie takich zapytań w następujący sposób:

  1. SELECT *
  2. FROM auta LEFT JOIN osoby ON auta.pesel = osoby.pesel LEFT JOIN wypadki ON auta.nr_rejestr=wypadki.nr_rejestr


Ten post edytował JoShiMa 3.03.2009, 10:46:10


--------------------
Go to the top of the page
+Quote Post
kodereq
post
Post #3





Grupa: Zarejestrowani
Postów: 87
Pomógł: 0
Dołączył: 27.02.2009

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


Dzieki, dokładnie o to mi chodziło.

Czy mogłabyś mi jeszcze wyjaśnić jak działają te JOINy od strony technicznej ? Chodzi o podobne oszacowanie jak powyżej. Oczywiście odwdzięczę się magicznym kliknięciem smile.gif Z góry dziękuję.

Ten post edytował kodereq 3.03.2009, 18:41:00
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 15:00