Autor Zpráva
Icka
Profil *
Ahoj, poradil by někdo jak udělat toto:

SELECT id, jmeno, prijmeni,
IF (nejaka podminka, (t1.mesto, t1.kraj), (t2.mesto, t2.kraj))

nevim jak to správně zadat, ale na jednu podmínku vypsat jiné výsledky (z tabulky 1 nebo 2)
juriad
Profil
Icka:
Pokud máš v několika tabulkách data se stejnou strukturou, tak máš blbě navrženou strukturu databáze. Data stejného formátu patří do stejné tabulky.
Nevytvářej tedy tabulky pojmenované třeba podle roků, vytvoř jednu tabulku se sloupcem rok (nebo ještě lépe datum).
Pokud je tvůj argument, že to děláš kvůli výkonu, tak vůbec netušíš, jak velká data databáze zvládne - miliony záznamů v jedné tabulce jsou „nic“.
Icka
Profil *
Dobře, takže pro pochopení je to navrženo takto:

pokud "klient" není přiřazen ke "kanceláři" tak vypsat osobní město a kraj
pokud "klient" je přiřazen ke "kanceláři" tak vypsat město a kraj kanceláře

A to nevím jak udělat


1) kanceláře mám v samostatné tabulce
2) u uživatelů mám jen id kanceláře nebo 0 jako žádná kancelář
3) při selectu mě zajímá v první řadě město a kraj kanceláře (pokud id kanclu > 0) jinak město a kraj uživatele


zatim mám jen podmínky samostatně:

t1.id, t1.jmeno, t1.prijmeni, ... IF(t1.kancelar>0,t2.mesto,t1.mesto) AS mesto, IF(t1.kancelar>0,t2.kraj,t1.kraj) AS kraj

ale zdá se mi to nehezký :( .. jinýmy slovy, kdyby tam bylo v té podmínce těch sloupců víc, asi by to už zabralo nějakej ten výpočetní výkon..
představoval jsem si to jako jednu podmínku a podle toho sloupce...
Kajman
Profil
např.

SELECT CASE
         WHEN k.id IS NULL THEN u.mesto
         ELSE k.mesto
       END AS mesto,
       CASE
         WHEN k.id IS NULL THEN u.kraj
         ELSE k.kraj
       END AS kraj
FROM   uzivatel u
       left join kancelar k
              ON u.id_kancelar = k.id 

Nebo to if, musí tam být také dvakrát.
Icka
Profil *
ok, takže asi ke každému sloupci pokaždé stejná podmínka...
Kajman
Profil
Pokud kancelář má město i kraj vždy vyplněné (nemůže být null), tak jde psát i
select coalesce(k.mesto,u.mesto) mesto, ...
juriad
Profil
Správně by neměla být hodnota id_kanceláře vyplněná, pokud žádná není. (NULL)
Pak všechny údaje dostaneš:
SELECT c.id, c.jmeno, c.prijmeni, COALESCE(o.mesto, c.mesto) AS mesto, COALESCE(o.kraj, c.kraj) AS kraj FROM klienti c LEFT JOIN kancelare o ON c.id_kancelare = o.id WHERE ...
Icka
Profil *
jj to jsem tam taky chvilku měl.. problém je že je tam ještě jeden faktor..

může být situace, kdy je id.kanceláře > 0 ale stav.kanceláře = 0 (je vypnuta)
dá se i s tim něco udělat?

myslím tím že když je kancelář.stav 0, tak jako by to byl nepřiřazený uživatel


takže ne uplně vždy by bylo uzivatel.kancelar = NULL
juriad
Profil
Tak do vazební podmínky přidáš ještě podmínku na stav:
LEFT JOIN kancelare c ON c.id_kancelare = o.id AND o.stav != 0
Icka
Profil *
áá jasně, už to máám , děkuji mnohokráát!!


šikovný lidi sou tu ;-)

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: