Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]podwójny warunek w if()
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Mam dwie tabele na podstawie której chcę coś wyciągąnąć i muszę zastosować if. Problem polega na tym że w if() potrzebuję podać podwójny warunek.
Pytanie wygląda mniej więcej tak
  1. SELECT IF(tab1.warunek1=NULL tab1.warunek2='1',sum(cos),NULL) FROM tab2 JOIN tab1 USING (id_wystepujace_w_obu_tab)

To oczywiście w wielkim uproszczeniu.
Ale moje pytanie brzmi czy w ogóle można takie 2 warunki w if wstawić. Nigdzie nie znalazłem przykładu, a przynajmniej te co znajdowałem mnie nie satysfakcjonowały, które rozwiązywałyby ten problem.
nospor
W IF dajesz wyrazenie logiczne. Dowolne wyrazenie logiczne...
Nie:IF(tab1.warunek1=NULL tab1.warunek2='1',sum(cos),NULL)
a:IF(tab1.warunek1=NULL AND tab1.warunek2='1',sum(cos),NULL)
lub: IF(tab1.warunek1=NULL OR tab1.warunek2='1',sum(cos),NULL)
Nie wiem co ty tam za warunek chciales miec
jacusek
rzeczywiście nie miałem and, ale nie zmienia to faktu, że z and też niestety nie działa tak jak powinno. Warunek powinien być z and.
No i powinno byś is null, a nie = null wstydnis.gif
teraz wygląda to w ten sposób
  1. tab1.kolumna1 IS NULL AND tab1.kolumna2='warunek'
nospor
Nie dziala jak powinno? To może napisz słownie co chcesz osiągnąć bo zapytanie samo w sobie jest ok.

ps: strzelam:
Na moj gust to ty chyba chciales zrobic tak:
sum(IF(tab1.warunek1 is NULL and tab1.warunek2='1',cos,NULL))
jacusek
co ciekawe przy or mam ten sam wynik ......
Spróbuję to opisać.
W jednej tabeli mam dane statystyczne dotyczące sprzedawców. Sprzedawcy są podzieleni na kategorie. Sprzedawców trzymam w osobnej tabeli - co chyba jest najbardziej zrozumiałe.
Chciałem porównać w jednej tabeli wyniki sprzedawców w zależności od ich przynależności. Każdy zależy od jakiegoś regionu i ma powiedzmy inny stopień (stąd te dwa warunki) i pełne pytanie wygląda mniej więcej w ten sposób.
  1. SELECT DISTINCT DATA AS DATA,IF(region=1 AND stopien='kierownik',sum(ilosc),NULL),
  2. IF(region IS NULL AND stopien='kierownik',sum(ilosc),NULL)
  3. FROM statystyka
  4. JOIN sprzedawcy USING id_sprz
  5. GROUP BY DATA

To oczywiście przykład bo suma w środku jest dłuższa, ale oddaje to mniej więcej całą idee zapytania.
Co ciekawe, cokolwiek nie wstawię do warunku drugiego or czy and zawsze mam ten sam wynik co w kolumnie wynikającej z pierwszego warunku lub wartość nullową - czyli nie spełniającą warunku.


nospor
Zacytuje ci moją wypowiedz z poprzedniego posta:
Cytat
ps: strzelam:
Na moj gust to ty chyba chciales zrobic tak:
sum(IF(tab1.warunek1 is NULL and tab1.warunek2='1',cos,NULL))
bo na moj gust to ten sum tam wlasnie powinien wygladac.
jacusek
mój błąd znalazłem. Gdzieś na końcu przykleił mi się warunek w poprzedniego pytania i schował się linijek poniżej. dostal.gif sciana.gif

Ale stała się inna ciekawa rzecz. Po znalezieniu błędu i wprowdzeniu zapytanie zachowuje się jakby "nie dzieliło" wyników według warunków. Mysql sam sobie wybiera co wstawić do taabeli. I teraz to wygląda w ten sposób:
Pytanie
  1. SELECT DISTINCT DATA AS DATA,IF(region=1 AND stopien='kierownik',sum(ilosc),NULL) AS kolumna1,
  2. IF(region IS NULL AND stopien='kierownik',sum(ilosc),NULL) AS kolumna2,
  3. IF(region IS NULL AND stopien='sprzedawca',sum(ilosc),NULL) AS kolumna3,
  4. sum(ilosc) AS pelna_suma
  5. FROM statystyka
  6. JOIN sprzedawcy USING (id_sprz )
  7. GROUP BY DATA

I teraz ciekawe są odpowiedzi, ponieważ wszędzie w tabli wynikowej mam pokazane to w ten sposób


data kolumna1 kolumna2 kolumna3 pelna_suma
data 15 null nulll 15
data null 12 null 12
data null 10 null 10
data null null 35 35
te wyniki są kompletną bzdurą. Wygląda tak jakby spełniał sobie tylko jednej wynik. Sprawdziłem w tabeli źródłowej i to nieprawda. wygląda jakby brał pod uwagę tylko jeden warunek. Dlaczego się tak dzieje?
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.