Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Jak zrobić IF'a w MySQL?
Forum PHP.pl > Forum > Przedszkole
cent4
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?
phpion
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.
cent4
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]'))
BaN
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
cent4
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"
phpion
Nie IFLULL, tylko IFNULL.
cent4
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...
eviance
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

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

Odróżniaj aliasy od pól tabel
cent4
  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 :-)
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.