Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Jak zrobić IF'a w MySQL?
cent4
post 18.06.2012, 19:55:36
Post #1





Grupa: Zarejestrowani
Postów: 415
Pomógł: 0
Dołączył: 24.12.2008

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


Mam instrukcję, która prawidłowo pobiera dane z bazy:
  1. SELECT e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt WHERE Med='$row[Med]' AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]'

ale może się tak zdażyć, że e.Nr_czyt może być równy 0 wtedy cała instrukcja nie działa :-(, bo nieprawidłowo pobierze c.Nr_czyt, c.Imie z tabeli czyteln...
Jak zrobić to, żeby np. zwracał cyfrę 0 w c.Nr_czyt, c.Imie?
Jak tu wstawić warunek, że jak e.Nr_czyt=0 wtedy zrób c.Nr_czyt-0 i c.Imie=0?
Go to the top of the page
+Quote Post
phpion
post 18.06.2012, 20:05:21
Post #2





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




Poczytaj dokumentację:
http://dev.mysql.com/doc/refman/5.0/en/con...-functions.html
Jeśli nadal będziesz miał problem - podaj w jaki sposób próbowałeś wykorzystać IF.
Go to the top of the page
+Quote Post
cent4
post 18.06.2012, 22:08:12
Post #3





Grupa: Zarejestrowani
Postów: 415
Pomógł: 0
Dołączył: 24.12.2008

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


Kompletnie nie wiem jak to ugyźć...

Daję coś takiego ale nie działa :-(:
  1. SELECT IFNULL(e.Nr_czyt=0,e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt WHERE Med='$row[Med]' AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]')

lub coś takiego ale też nie działa:
  1. SELECT IF (Nr_czyt>0, (e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt WHERE Med='$row[Med]' AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]'), (e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie=0, c.Nazwisko=0 FROM egzempl AS e JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt WHERE Med='$row[Med]' AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]'))
Go to the top of the page
+Quote Post
BaN
post 18.06.2012, 22:46:59
Post #4





Grupa: Zarejestrowani
Postów: 158
Pomógł: 43
Dołączył: 9.11.2007

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


Skoro jak sam napisałeś nie ma odpowiedniego rekordu w tabeli `czyteln` dla e.Nr_czyt=0, więc LEFT JOIN zamiast JOIN w pierwszym zapytaniu co podałeś. Jeśli nie będzie odpowiedniego rekordu w odpowiednich polach będziesz miał NULL, dodatkowo źle stosujesz IFNULL, powinno być:
  1. IFLULL(c.Nr_czyt,0) AS Nr_czyt

skoro chcesz mieć 0 jeśli c.Nr_czyt jest NULL
Go to the top of the page
+Quote Post
cent4
post 19.06.2012, 06:53:30
Post #5





Grupa: Zarejestrowani
Postów: 415
Pomógł: 0
Dołączył: 24.12.2008

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


Już poprawiłem IFNULL ale dalej zwraca mi błędy:
  1. SELECT e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko, IFLULL(c.Nr_czyt,0) AS c.Imie, IFLULL(c.Nr_czyt,0) AS c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt WHERE Med='$row[Med]' AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]'

Odpowiedź z Firebug:
"Could not execute query.Something is wrong in your syntax obok '.Imie, IFLULL(c.Nr_czyt,0) AS c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON ' w linii 1"
Go to the top of the page
+Quote Post
phpion
post 19.06.2012, 06:59:49
Post #6





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




Nie IFLULL, tylko IFNULL.
Go to the top of the page
+Quote Post
cent4
post 19.06.2012, 07:09:24
Post #7





Grupa: Zarejestrowani
Postów: 415
Pomógł: 0
Dołączył: 24.12.2008

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


No jasne - przegapiłem to smile.gif.
Ale dalej nie działa:
Could not execute query.Something is wrong in your syntax obok '.Imie, IFNULL(c.Nr_czyt,0) AS c.Nazwisko FROM egzempl AS e JOIN czyteln AS c ON ' w linii 1

Nie działa zarówno JOIN jak i LEFT JOIN...
Go to the top of the page
+Quote Post
eviance
post 19.06.2012, 08:53:08
Post #8





Grupa: Zarejestrowani
Postów: 31
Pomógł: 0
Dołączył: 18.03.2011
Skąd: R do M / Sanniki

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


hmm.... jak widzisz używasz tych samych nazw c.imie, c.nazwisko tak napewno nie bedzie działać

  1. SELECT
  2. e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko,
  3. IFNULL(c.Nr_czyt,0) AS c.Imie, IFNULL(c.Nr_czyt,0) AS c.Nazwisko
  4. FROM egzempl AS e
  5. JOIN czyteln AS c ON e.Nr_czyt=c.Nr_czyt
  6. WHERE Med='$row[Med]'
  7. AND Kat='$row[Kat]' AND Nr_id='$row[Nr_id]'


pomysłęm jest case

  1. CASE
  2. WHEN c.Imie IS NULL THEN c.imie = 0
  3. END CASE AS imie

Go to the top of the page
+Quote Post
nospor
post 19.06.2012, 09:47:12
Post #9





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




NIe: IFLULL(c.Nr_czyt,0) AS c.Imie
a: IFLULL(c.Nr_czyt,0) AS Imie

Odróżniaj aliasy od pól tabel


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

"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
cent4
post 19.06.2012, 10:42:11
Post #10





Grupa: Zarejestrowani
Postów: 415
Pomógł: 0
Dołączył: 24.12.2008

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


  1. SELECT e.id, e.Med, e.Kat, e.Nr_id, e.Nr_egz, e.Wartosc, e.Dostepny, e.Nr_czyt, e.Data_wpr, c.Nr_czyt, c.Imie, c.Nazwisko, IF( e.Nr_czyt = '0', '', c.Imie ) AS Imiesprawdzone, IF( e.Nr_czyt = '0', '', c.Nazwisko ) AS Nazwiskosprawdzone
  2. FROM egzempl AS e
  3. LEFT JOIN czyteln AS c ON e.Nr_czyt = c.Nr_czyt


Tak to zrobiłem i działa :-)
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 Wersja Lo-Fi Aktualny czas: 24.07.2025 - 20:36