Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Problem z instrukcją if
Forum PHP.pl > Forum > Bazy danych > MySQL
szczurek
Witam wysyłam do bazy zapytanie:

  1. SELECT IF( (Ciag="BYDGOSZCZ"), "Koszyk", "BRAK" ) FROM WolneCiagi WHERE Ciag="BYDGOSZCZ";


I wszystko jest o.k. Wyświetla mi "koszyk" jednak jeśli wyślę

  1. SELECT IF( (Ciag="BYDGOSZCZ"), "Koszyk", "BRAK" ) FROM WolneCiagi WHERE Ciag="BYD";


To nie wyświetla mi "BRAK" tylko zwraca pusty wynik.

Może jest to kwestia tego ze wartość zwracana to NULL, jednak całe zapytanie jest umieszczone w procedurze i jeśli używam z niej funkcji IFNULL nie zmienia ona niczego. Kiedy zapytanie zwraca pusty wynik jest nadal pokazywane null zamiast wartości podawanej w funkcji.

Jeśli użyję IFNULL poza procedurą wszystko jest o.k. Nie wiem dlaczego tak to działa

Podejmowałem też próby z
  1. SELECT IF( (Ciag IS NULL), "KOSZYK", "else" ) FROM WolneCiagi WHERE Ciag LIKE "BYDGOSZCZ";
I wtedy wyświetla "else" jednak kiedy zapytanie zwraca pusty wynik to jest pusty zamiast "KOSZYK"
osiris
To Ci nigdy nie zadziala w ten sposob, a to dlatego ze warunek IF w instrukcji SELECT jest stosowany dla kazdego znalezionego rekordu, a jak nie znajdzie zadnego rekordu to wogole nie jest wykonywany!
Sprobuj raczej:
  1. SELECT IF((SELECT ciag FROM WolneCiagi WHERE ciag="bydgoszcz") = 'bydgoszcz', 'Koszyk', 'Brak')


A tak wogole to co Ty chcesz osiagnac tymi zapytaniami?
szczurek
Dzięki, dodając is null obsługuje mi ładnie również nieznane wartości.

Natomiast mam jeszcze jedno pytanie, jak wywołać procedurę jako podzapytanie? Chodzi o to, że funkcje nie mogą korzystać z zapytań, pobieram więc dane procedurą, ale jako jej parametr potrzebuję podać wartość zwracaną przez zapytanie główne.

Chciałbym żeby wyglądało to tak

  1. SELECT Pole1, Pole2, (call Procedura(Pole1))


Ale oczywiście w tak nie działa. Jak to zrobić? Oczywiście poza zmianą DBMS'a na taki gdzie funkcje obsługują zapytanie SQL;

Pozdrawiam

P.s. Lub chociaż czy procedura w jakiś sposób może być argumentem funkcji? Zwyczajnie select funkcja(procedura()); oczywiście się nie da
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.