![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 0 Dołączył: 15.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
czesc
wyszukiwanie m aodbywac sie po 5 tabelach poniewaz sa relacje miedzy pierwsza a 4 pozostalymi tab 1 'uzytkownicy' id | imie | nazwisko | miasto tab 2 'praca' id | uzkid(klucz 'id' z tab 1) | stanowisko | firma tab 3 'szkola' id | uzkid(klucz 'id' z tab 1) | nazwa | uwagi tab 4 'kursy' id | uzkid(klucz 'id' z tab 1) | nazwa | uwagi tab 5 'dodatkowe' id | uzkid(klucz 'id' z tab 1) | podsumowanie | uwagi chce otrzymac wynik w postaci uzytkownika ktory w tabeli praca, szkola, kursy, dodatkowe posiada okreslony ciag znakow. jeden uzytkownik moze miec kilka prac, szkol, kursow ale tylko jeden wpis w tabeli dodatkowe. -------------------- Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Mozesz rowniez wykorzystac LEFT JOIN. Temat przewija sie przez forum co 2 dzien, radze szukac na forum. -------------------- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 85 Pomógł: 0 Dołączył: 15.07.2005 Ostrzeżenie: (0%) ![]() ![]() |
nie bardzo wiem po co wbijac wszystko w 1 zapytanie sqla? Nie lepiej polaczyc tylko te tabele, co do ktorych jestesmy pewni, ze beda mialy po jednym wpisie a reszte wyciagnac osobnymi zapytaniami z odpowiednimi warunkami ?
Np pobrac d z tabeli uzytkownicy i potem pobierac dane z pozostalych podajac w klauzuli where uzkid=uzytkownicy.id takie zapytania powinny wykonywac sie szybciej zwlaszcza jesli nie wyciagamy wszystkich pol z tabel a tylko te niezbedne. Jedynym warunkiem zastosowania kilku kwerend do osobnych tabel jest wykonanie najpierw kwerendy na tabeli uzytkownikow i pobranie z niej ida ktory potem wstawiamy do reszty zapytan (takie rozwiazanie daje o ile sie nie myle mniejsze obciazenie pamieci serwera, bo tabela powstala z jointa to bedzie suma wszystkich zwroconych wierszy wszystkich tabel, np wpis z tabeli uzytkownicy zostanie powielony tyle razy ile jest rekordow w tabeli ktora zwroci ich najwiecej) Sorka chyba jeszcze sie do konca nie obudzilem jak pisalem ta odpowiedz (blednie zrozumialem pytanko) ![]() Ten post edytował popo 26.07.2005, 18:23:22 |
|
|
![]()
Post
#4
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Jedno zapytanie jest wydajniejsze niz n odwolan do bazy + do tego przesylanie danych. Po co do tego wykorzystywac php, jak mozna gotowy wynik zwrocic z bazy. Wlasnie do tego sluza byzy danych, nie tylko do skladowania danych ale rowniez do obliczen, relacji.
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 0 Dołączył: 15.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
zreszta te zapytanie ma spelniac funkcje szukajaca, nie widze sensu rozbijania tego na kilka zapytan. wynik musimy miec w postaci danych uzytkownika, dla ktorefo spelnione sa warunki szukania. np. (szukanie zaawansowane)znajdz uzytkownika, ktory pracuje w firmie xxxx, skonczyl szkole YYY ma skonczone kursy AAA itd. albo szukanie proste gdzie wpisuje sie w formularzu szukana fraze i dopasowywana jest ona w rozne pola w tych wszystkich tabelach.
wczoraj wieczorkiem napisalem tak:
co prawda inne sa nazwy tabel i nie jest ich 5 ale nawiazuje do tego samego i analizuje jakie mi zwraca wyniki, gdy nie bylo czesci AND i.zaint ocenilem , ze dziala OK ale gdy to dodalem to juz nie rozumialem, gdyz nie zwrocilo mi rekorku o ktorym wiedzialem, ze zwrocilem (moze przegapilem bo pozno bylo). Czy w ogole dobra jest koncepcja takiego zapytania (kilka left outer join)? wczesnie zrobilem takie samo zapytanie tylko bez OUTER. ide dalej zaglebiac sie w SQl. Ten post edytował voytass 26.07.2005, 08:45:28 -------------------- Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Mysle ze wystarczy LEFT JOIN.
-------------------- |
|
|
![]()
Post
#7
|
|
![]() Grupa: Przyjaciele php.pl Postów: 1 467 Pomógł: 13 Dołączył: 22.02.2003 Ostrzeżenie: (0%) ![]() ![]() |
left join to to samo, co left outer join. słówko outer jest tylko po to, żeby było logicznie odwrotenie niż w inner joinach, które jedna nie rozróżniają left i right, bo każdy stronniczy join jest outer joinem.
A tak swoją drogą możesz sobie pokombinować w prostszy sposób poprzez UNION: Jeżeli potrzebujesz dla określonego USERA możesz zrobić tak: albo
Ten post edytował Jabol 26.07.2005, 10:22:19 |
|
|
![]()
Post
#8
|
|
![]() Grupa: Przyjaciele php.pl Postów: 2 923 Pomógł: 9 Dołączył: 25.10.2004 Skąd: Rzeszów - studia / Warszawa - praca Ostrzeżenie: (0%) ![]() ![]() |
Cytat left join to to samo, co left outer join. słówko outer jest tylko po to, żeby było logicznie odwrotenie niż w inner joinach, które jedna nie rozróżniają left i right, bo każdy stronniczy join jest outer joinem. Dlatego napisalem samo LEFT JOIN ![]() Wydaje mi sie ze po przez UNION zapytanie troszeczke straci na wydajnosci. -------------------- |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 113 Pomógł: 0 Dołączył: 15.04.2002 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
union jest dostepne od mysql 4.0 a ja dysponuje 3.23 wiec zostane przy left join ale dzieki za info.
-------------------- Wojtek@7; Wojtek@ogniwo.net; [Simple Forum - 100% - phpclasses.org]; MCP
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 19.08.2025 - 13:44 |