Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Konstrukcja zapytania
Jdwind
post
Post #1





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Witam, mam zapytanie, którym pobieram z bazy z dwóch tabel dane:
  1. "SELECT pl.idplac, pl.rok, pl.miesiac, pl.podstawa, pl.dodatek1, pl.dodatek2, pl.dodatek3, pl.dodatek4, pl.dodatek5, pl.dodatek6, pl.kol10, pl.kol11, pl.kol12, pl.kol13, pl.kol14, pl.kol15, pl.kol16, pl.kol17, pl.kol18, pl.kol19, pl.kol20, pl.kol21, pl.zdrow1, pl.zdrow2, pl.kol22, pl.potr1, pl.potr2, pl.potr3, pl.zaliczka, pl.rodzinne, pl.wyplata, pr.nazwiskoimie FROM pracownicy pr LEFT JOIN place pl ON (pr.idprac = pl.idprac) WHERE pr.idprac ='" .$nazwim ."' AND (pl.rok BETWEEN '" .$rokod ."' AND '" .$rokdo ."') AND (pl.miesiac BETWEEN '" .$miesiacod ."' AND '" .$miesiacdo ."') ORDER BY pr.nazwiskoimie, pl.rok;"

i teraz, jeżeli w tabeli place nie ma rekordu to i tak w wyniku pokazuje jeden wiersz, ponieważ pobiera nazwiskoimie osoby z tabeli pracownicy. Później ładuję nagłówki tabelki i za pomocą while($row = mysql_fetch_array($rezultat)) ładuję wynik (w tym wypadku nazwiskoimie, reszta zawartości tabeli jest pusta. Jak przed załadowaniem nagówków tabelki sprawdzić, że idplac jest puste i nie ładować żadnego wiersza?

Ten post edytował Jdwind 4.09.2012, 10:42:43
Go to the top of the page
+Quote Post
b4rt3kk
post
Post #2





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Musisz zastosować złączenie warunkowe, tzw. "teta". Inaczej mówiąc jeśli chcesz by nie pobierało pustych pól to dodaj warunek id <> NULL.

Ten post edytował b4rt3kk 4.09.2012, 10:52:03


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
Jdwind
post
Post #3





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Wydaje mi się (ale jako newbie oczywiście mogę się mylić), że nie chodzi o zapytanie - bo takim zapytaniem zawsze pobiorę przynajmniej imienazwisko. Chodzi raczej o to, żeby nie wyświetlić wyników, jeśli nie ma idplac dla danej osoby. Czyli najpierw puszczam zapytanie, potem sprawdzam, czy idplac <> "" i ewentualnie wyświetlam dane. Można to sprawdzić czymś w rodzaju mysql_num_rows dla jednego pola, ale zanim zapuszczę while($row = mysql_fetch_array($rezultat))?
Go to the top of the page
+Quote Post
PanGuzol
post
Post #4





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Zamień miejscami tabele w join. Place po lewej a pracownicy po prawej, ewentualnie użyj right join zamiast left


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
Jdwind
post
Post #5





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Zamieniłem LEFT na RIGHT i działa dokładnie tak, jak chciałem. Czy dobrze rozumiem, że obecna konstrukcja: ..FROM pracownicy pr RIGHT JOIN place pl ON (pr.idprac = pl.idprac).. mówi mi, że główne dane pobiera z tabeli place, a zależne z tabeli pracownicy, tak?
Bardzo dziękuję za pomoc, guziczek "Pomógł" wciśnięty oczywiście.
Go to the top of the page
+Quote Post
PanGuzol
post
Post #6





Grupa: Zarejestrowani
Postów: 353
Pomógł: 50
Dołączył: 28.07.2005
Skąd: Łaziska Górne

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


Right join czyli łączy pasujące dane z lewej tabeli do tabeli po prawej. Prawa tabela jest tabelą główną.


--------------------
Sposób na życie? Uśmiech na twarzy :D
"Widzę więcej, wiem więcej, tak to jest mniej więcej"
"NIE kradnij, rząd nielubi konkurencji"
Go to the top of the page
+Quote Post
Jdwind
post
Post #7





Grupa: Zarejestrowani
Postów: 38
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Stalowa Wola

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


Dziękuję jeszcze raz za wyjaśnienie i pomoc.
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: 19.08.2025 - 19:42