Skocz do zawartości

Select z czterech tabel.


Erbit

Rekomendowane odpowiedzi

Tochę takich rozwiązań widziałem ale wiem, że są tu fachowcy - może lepiej doradzą.

Mam cztery tabele t1, t2, t3, t4

t1 zawiera tylko id z t2,

t2 zawiera id z t3 oraz zawiera id z t4

W jaki spoób wykonać prawidłowo zapytanie bez użycia 'GROUP BY' (dla php 4.x)

Oczywiscie chodzi o to by jeden rekord odpowiedzi zawierał informacje t1.id, t2.id, t3.id, t4.id

Odnośnik do komentarza
Udostępnij na innych stronach

kurde nie widze tabel - ciężko

Może nie wydajny ale skuteczny:

Selecet t1.id, t2.id, t3.id, t4.id WHERE t1.id=t2.id AND t2.t3.id=t3.id AND t2.t4.id=t4.id

albo coś w tym stylu - nie widzę tabeli wiec nie wiem jak sa nazwane - klucze/powiazania.

Jezeli któraś tebale może nie zwiereć informacji o pozostałych to wczytaj się w LEFT JOIN, RIGHT JOIN i INNER JOIN.

Odnośnik do komentarza
Udostępnij na innych stronach

I tak powinni też reagować początkujący - w sumie nic nie pomogłem - luźna sugestia a chłopak już łapie o co chodzi ;-). Odwrotność erbita męczyła by temat aż do zusykania składni zabytania z prawidłowymi nazwami tabel :-).

Odnośnik do komentarza
Udostępnij na innych stronach

MMp, Michał w skrócie tak by sie nie rozpisywac.

Jak to wyglada

Zakladajmy ze mamy tabele o nazwie Tab i w niej pola id1,id2,id3

Umieszczajac tam 3 mln rekordow baza rosnie jak i jej przeszukiwanie staje sie coraz wolniejsze.

Mozna stworzyc w tym celu tabele

tab0,tab1,tab2 do tab 9 i taba do tabf sa to litery i cyfry uzywane przy sumie kontrolnej md5.

Nastepnie gdy dodajemy rekord ktorego np Pole ID3 wyglada nastepnujaco "3455" jego MD5 wynosic bedze np 3f45a45 itd. Suma kontrolna dla tego wpisu bedzie zawsze taka sama.

Pobieramy z md5 pierwsza liczbę i przypisujemy do zmiennej np. $tab

następnie dodając dany wpis podczas wybierania tabeli do ktorej mamy go dodac do komendy mysql zamiast nazwy tabeli podajemy nazwe tabelki ze zmienną z sumy kontrolnej np tabela$tab

Wpis zostanie dodany do tabela3.

Szukajac ID "3455" takze tworzymy jego MD5 i automatycznie przypisywana zostaje zmienna do nazwy tabeli w ktorej to id sie znajduje.

W taki sposob np 3 mln rekordow z bazy o 1 tabeli i 3 polach jest podzielona na 16 tabel po 3 pola w kazdej tabeli jest po 16 razy mniej wpisow a co za tym idzie szybciej dokonuje sie dzialan na bazie.

To tylko przyklad rozwiazania i moze zle go opisalem, ale tego typu rozwiazania sprawdzaja sie przy moich zastosowaniach gdzie jest po kilka milionow rekordow w jednej bazie.

Tak samo mozna byłoby zbudowac forum, zakladajac ze uklada posty w danym temacie wg daty to z daty tworzylby sume kontrolna i w zaleznosci od sumy kontrolnej do tej tabeli bylyby zapisywane dane.

Mam nadzieje ze nie namieszalem i dalo sie cos z tego zrozumiec ale nie jestem najlepszym tlumaczem rozwiazań. I naprawde przy tym rozwiazaniu nalezy dobrze rozplanowac baze tak aby z odpowiedniego pola tworzyc sume kontrolna czyli w zaleznosci od wykorzystania.

Z tym ze mozna takze zalozyc wieksza ilosc tabel np pobierajac pierwsze 2 litery sumy kontrolnej

Co daje nam np nazyw tabel o koncowkach tabela2D tabelaD1 tabela FA itd.

Ale to wszystko wg uznania.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności