Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Problem z instrukcją if
szczurek
post
Post #1





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 1.10.2006
Skąd: Bydgoszcz

Ostrzeżenie: (10%)
X----


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"

Ten post edytował szczurek 3.08.2007, 08:46:04


--------------------
"Nie masz żadnej szansy, ale ją wykorzystaj" Arthur Schopenhauer
wiersze
Go to the top of the page
+Quote Post
osiris
post
Post #2





Grupa: Zarejestrowani
Postów: 121
Pomógł: 15
Dołączył: 19.07.2007

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


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?
Go to the top of the page
+Quote Post
szczurek
post
Post #3





Grupa: Zarejestrowani
Postów: 59
Pomógł: 0
Dołączył: 1.10.2006
Skąd: Bydgoszcz

Ostrzeżenie: (10%)
X----


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

Ten post edytował szczurek 3.08.2007, 19:54:36


--------------------
"Nie masz żadnej szansy, ale ją wykorzystaj" Arthur Schopenhauer
wiersze
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 - 12:05