2010-12-04 20 views
26

iki saha nnmu ve nnmi,MySQL SEÇ DURUM

if nnmu is equal to 1, I need to return naziv_mesta from **mesto_istovara**, 
else if it's =0 I need to return naziv_mesta from mesto_utovara table 

ve ters İlk başta her şey

if nnmi is equal to 1, then I need to return naziv_mesta from **mesto_utovara,** 
else if it's =0 need to return naziv_mesta from mesto_istovara. 

iyi görünüyor, ama nedense değerlerini karıştırmak nnmi ve nnmu her ikisi de 0'a eşit olduğunda çalışır, ancak her iki değer 1 olduğunda, anlamsız olur. Herhangi bir yardım?

select u.id_utovar, 
      u.datum_isporuke, 
      u.broj_otpremnice, 
      r.naziv_robe,    
      CASE u.nnmu 
       WHEN u.nnmu ='0' THEN mu.naziv_mesta 
       WHEN u.nnmu ='1' THEN m.naziv_mesta 
      ELSE 'GRESKA' 
      END as mesto_utovara, 
      CASE u.nnmi 
       WHEN u.nnmi = '0' THEN m.naziv_mesta 
       WHEN u.nnmi = '1' THEN mu.naziv_mesta 
       ELSE 'GRESKA' 
      END as mesto_istovara,             
      m.adresa, 
      m.kontakt_osoba, 
      m.br_telefona, 
      u.broj_paleta, 
      u.bruto, 
      k.username, 
      u.napomena,     
      v.registracija, 
      p.naziv_prevoznika, 
      u.cena, 
      u.korisnik_logistika, 
      u.korisnik_analitika, 
      u.datum_unosa, 
      u.vreme_unosa, 
      u.zakljucan, 
      u.id_mesto_utovara, 
      u.id_mesto_istovara, 
      u.nnmu, 
      u.nnmi    
     FROM utovar u ,mesto_utovara mu, mesto_istovara m, roba r, vozila v,prevoznik p, korisnik k 
     WHERE u.id_mesto_istovara=m.id_mesto_istovara 
     and k.id_korisnik = u.korisnik 
     and r.id_robe=u.id_robe 
     and u.id_mesto_utovara = mu.id_mesto_utovara 
     and v.id_vozilo = u.id_vozilo 
     and p.id_prevoznik = u.id_prevoznik 
     ORDER by u.id_utovar DESC 

cevap

65

Sen uygunsuz 2 differentCASE sözdizimi karıştırma edilmektedir.

kullanın bu tarz (Aradı) (Basit)

CASE u.nnmu 
    WHEN '0' THEN mu.naziv_mesta 
    WHEN '1' THEN m.naziv_mesta 
ELSE 'GRESKA' 
END as mesto_utovara, 

Bu (Basit ama boolean arama yüklemleri ile) değil

CASE u.nnmu 
    WHEN u.nnmu ='0' THEN mu.naziv_mesta 
    WHEN u.nnmu ='1' THEN m.naziv_mesta 
ELSE 'GRESKA' 
END as mesto_utovara, 

CASE 
    WHEN u.nnmu ='0' THEN mu.naziv_mesta 
    WHEN u.nnmu ='1' THEN m.naziv_mesta 
ELSE 'GRESKA' 
END as mesto_utovara, 

Ya da bu tarz

MySQL'de bu, u.nnmu'un u.nnmu ='0' boolean ifadesinin değerine eşit olup olmadığını sınama ile sonuçlanacaktır. true (1) ve (nnmu ='1') false olarak değerlendirilir olarak nmu = '0' sonra (nnmu ='0') değerlendirir olursa olsun u.nnmu1 veya 0 durumda ifade sonucu olup olmadığını kendisi Örneğin 1

olacaktır (0). nmu = '1' sonra (nnmu ='0') olarak değerlendirilirse durumda ifade Bu çözüm

SELECT CASE '0' 
    WHEN 1 THEN '0' 
    WHEN 0 THEN '1' 
ELSE 'GRESKA' 
END as mesto_utovara 

verir false (0) ve (nnmu ='1') true olarak değerlendirilir (1). Bunları durum ifadesine değiştirmek,

SELECT CASE '1' 
    WHEN 0 THEN '0' 
    WHEN 1 THEN '1' 
ELSE 'GRESKA' 
END as mesto_utovara