Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Kohana] Instrukcja IF w zapytaniu.
Forum PHP.pl > Forum > Przedszkole
L0k0
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
phpion
Skoro robisz return to przecież execute() się nie wykona. Poza tym taka konstrukcja będzie przecież powodować błąd składni.
L0k0
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.
phpion
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.
L0k0
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...
phpion
Nie działa = ? Wywala błąd? Nie zwraca danych? Wyświetl $query i zobacz co w nim siedzi.
L0k0
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.
nospor
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.
L0k0
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...
nospor
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.
phpion
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.
nospor
@phpion nie przejmuj się... w "pewnym" wieku, to normalne wink.gif
phpion
Sypę się... sadsmiley02.gif
nospor
No cóż... taki wiek... ale nie przejmuj się... teraz będzie już tylko gorzej biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.