Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][Kohana] Instrukcja IF w zapytaniu.
L0k0
post
Post #1





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Witam!

Mam taką konstrukcję:

  1. $query = db::select_array($columns)->from('pracownicy')
  2. ->where('imie', 'LIKE', '%'.$patter.'%')
  3. ->or_where('nazwisko', 'LIKE', '%'.$patter.'%')
  4. ->or_where('login', 'LIKE', '%'.$patter.'%');
  5. IF($zatrudnieni === true) { echo 'lalala'; $query->and_where('status_zatrudnienia', '=', 'z'); }
  6. RETURN $query->order_by('nazwisko', 'ASC')
  7. ->execute()->as_array('id');


Echo się wyświetla, jeśli zmienię nazwę tabeli ze 'status_zatrudnienia' na inny to wywala błąd co znaczy, że ten warunek się wykonuje jednak wyświetlają się dalej wszystkie statusy_zatrudnienia, a nie tylko ten, który jest oznaczony jako 'z'.

Czy ma ktoś pomysł co tu jest nie tak?

Pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 13)
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Skoro robisz return to przecież execute() się nie wykona. Poza tym taka konstrukcja będzie przecież powodować błąd składni.
Go to the top of the page
+Quote Post
L0k0
post
Post #3





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Cytat(phpion @ 19.03.2015, 08:51:17 ) *
Skoro robisz return to przecież execute() się nie wykona. Poza tym taka konstrukcja będzie przecież powodować błąd składni.


Czemu się nie wykona? Przecież to wciąż jedna linia tylko podzielona enterem

  1. RETURN $query->order_by('nazwisko', 'ASC')
  2. ->execute()->as_array('id');


równe jest temu:

  1. RETURN $query->order_by('nazwisko', 'ASC')->execute()->as_array('id');


Poza tym reszta warunków się wykonuje: mogę szukać po imieniu, nazwisku i loginie. Wszystko śmiga, nie gra tylko ten ostatni warunek.
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Racja, mój błąd. Testowo zamiast wykonywać zapytanie wyświetl je sobie na ekranie (zwykłe echo $query) i zobacz jak ono dokładnie wygląda. Pozornie wszystko jest ok.
Go to the top of the page
+Quote Post
L0k0
post
Post #5





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Jeśli zrobię samo:

  1. $query = db::select_array($columns)->from('pracownicy')
  2. ->where('status_zatrudnienia', '=', 'z');
  3. RETURN $query->order_by('nazwisko', 'ASC')
  4. ->execute()->as_array('id');


To działa. Natomiast taka wersja:

  1. $query = db::select_array($columns)->from('pracownicy')
  2. ->where('status_zatrudnienia', '=', 'z')
  3. ->or_where('imie', 'LIKE', '%'.$patter.'%')
  4. ->or_where('nazwisko', 'LIKE', '%'.$patter.'%')
  5. ->or_where('login', 'LIKE', '%'.$patter.'%');
  6.  
  7. RETURN $query->order_by('nazwisko', 'ASC')
  8. ->execute()->as_array('id');


Już nie. Nie wiem...
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Nie działa = ? Wywala błąd? Nie zwraca danych? Wyświetl $query i zobacz co w nim siedzi.
Go to the top of the page
+Quote Post
L0k0
post
Post #7





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Jak zrobiłem var_dump na $query to dostaję obiekt.

Coś jest nie tak z tymi WHERE. W ostatnim przypadku wybrał mi status_zatrudnienia 'z' jak wpisałem w formularzu imię...

Sama konstrukcja zapytania musi być jakaś zła.
Go to the top of the page
+Quote Post
nospor
post
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Coś jest nie tak z tymi WHERE. W ostatnim przypadku wybrał mi status_zatrudnienia 'z' jak wpisałem w formularzu imię...

Twoje zapytanie wyglada tak:
... where status_zatrudnienia = 'z' or blabla or blabla or blabla
Wiec logiczne ze jesli ktorys z warunkow, chocby jeden jest spelniony, to pobierze rekord dla niego... Co ztego ze podajesz imie, jak masz warunek na status zatrudnienia z OR... troche LOGIKI sie klania.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
L0k0
post
Post #9





Grupa: Zarejestrowani
Postów: 161
Pomógł: 4
Dołączył: 18.03.2011

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


Cytat(nospor @ 19.03.2015, 09:19:19 ) *
Twoje zapytanie wyglada tak:
... where status_zatrudnienia = 'z' or blabla or blabla or blabla
Wiec logiczne ze jesli ktorys z warunkow, chocby jeden jest spelniony, to pobierze rekord dla niego... Co ztego ze podajesz imie, jak masz warunek na status zatrudnienia z OR... troche LOGIKI sie klania.


Masz rację. Pytanie: jak to ułożyć, żeby ten 'status_zatrudnienia' był wykonywany bezwzględnie? Jeśli przeniosę go na spód i dam and_where to także nie działa...

Jedyne co mi przychodzi do głowy to zrobienie zapytania po zapytaniu...

Ten post edytował L0k0 19.03.2015, 09:28:58
Go to the top of the page
+Quote Post
nospor
post
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie znam sie na Kohana, ale na 100% w jej dokumentacji masz podane jak nalezy budować zapytania AND i wewnatrz OR. Wystarczy tylko tam zajrzec.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post
Post #11





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Kurde, nie zwróciłem uwagi na te OR - nie mój dzień sad.gif Musisz zatem skorzytać z and_where_open + and_where_close żeby uzyskać (cos = cos OR to = to) AND tamto = tamto.
Go to the top of the page
+Quote Post
nospor
post
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




@phpion nie przejmuj się... w "pewnym" wieku, to normalne wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post
Post #13





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Sypę się... sadsmiley02.gif
Go to the top of the page
+Quote Post
nospor
post
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No cóż... taki wiek... ale nie przejmuj się... teraz będzie już tylko gorzej biggrin.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

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 - 10:35