Autor Zpráva
Prkny
Profil
Zdravím, prosím o pomoc.
Do níže uvedeného MySQL dotazu, bych potřeboval vložit podmínku: Když zbozi_volby1.ean je prázdný, tak zbozi_volby1.ean = ziv.ean
Pro Insert by to mělo být logicky vždy a pro Update jen když je prázdný zbozi_volby1.ean

INSERT INTO zbozi_volby1 (id_zbozi, kod, ean, nadpis_volby, volba, aktivni, jina_dostupnost)
  SELECT z.id, zi.isbn, zi.ean, 'Varianta', ziv.volba, zi.dostupnost, ziv.jina_dostupnost 
  FROM `zbozi` z, `zbozi_import_volby` ziv, `zbozi_import` zi 
  WHERE zi.velkoobchod='".$cislo_velkoobchodu."' AND zi.item_group_id='".$data['z_codepack']."' AND zi.dostupnost>0 AND       ziv.id_zbozi_importu=zi.id AND zi.item_group_id=z.codepack AND zi.velkoobchod=z.velkoobchod
  ON DUPLICATE KEY UPDATE zbozi_volby1.aktivni = '1', zbozi_volby1.jina_dostupnost = ziv.jina_dostupnost, zbozi_volby1.kod = zi.isbn

Předem děkuji za pomoc.
Serg
Profil
Do selectu jde přidat funkce IF: IF(expression, expr_true, expr_false)

Něco jako:
INSERT INTO 
  zbozi_volby1 (id_zbozi, kod, ean, nadpis_volby, volba, aktivni, jina_dostupnost)
SELECT 
  z.id, 
  zi.isbn, 
  IF(zi.ean = '', ziv.ean, zi.ean) 
  'Varianta', 
  ziv.volba, 
  zi.dostupnost, 
  ziv.jina_dostupnost 
  
  FROM 
    `zbozi` z, 
    `zbozi_import_volby` ziv, 
    `zbozi_import` zi 
  WHERE 
    zi.velkoobchod='".$cislo_velkoobchodu."' AND 
    zi.item_group_id='".$data['z_codepack']."' AND 
    zi.dostupnost>0 AND
    ziv.id_zbozi_importu=zi.id AND 
    zi.item_group_id=z.codepack AND 
    zi.velkoobchod=z.velkoobchod
    
  ON DUPLICATE KEY UPDATE 
    zbozi_volby1.aktivni = '1', 
    zbozi_volby1.jina_dostupnost = ziv.jina_dostupnost, 
    zbozi_volby1.kod = zi.isbn
  

Jen mě tak napadá, nebylo by přehlednější použít JOIN? A taky mi příjde že ON DUPLICATE KEY UPDATE tam moc nepomáhá, jelikož u druhého a třetího přiřazení to přepíše na stejnou hodnotu kterou tam právě vložil, takže z toho bude pořád duplicita, pokud to tedy nějak nevyřeší ten sloupec "aktivni" = 1.

Edit: Ještě je taky rozdíl jestli je to prázdný řetězec, nebo je tam NULL, ve druhém případě je potřeba spíš funkce COALESCE než IF
Prkny
Profil
Děkuji moc...
Řetězec není NULL, takže takto je to správě.
Pokud by to bylo přes JOIN přehlednější, jsem pro všemi deseti to změnit.
Sám jsem na to ale krátký s MYSQL umím tak okrajově, ale třeba bych to přes JOIN lépe chápal, konkrétně tohle je fragment kódu který mi dodával externista ...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0