Autor | Zpráva | ||
---|---|---|---|
Icka Profil * |
#1 · Zasláno: 18. 8. 2014, 12:17:03
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 * |
#3 · Zasláno: 18. 8. 2014, 13:42:01 · Upravil/a: Icka
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 * |
#5 · Zasláno: 18. 8. 2014, 13:57:05
ok, takže asi ke každému sloupci pokaždé stejná podmínka...
|
||
Kajman Profil |
#6 · Zasláno: 18. 8. 2014, 14:03:36
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 |
#7 · Zasláno: 18. 8. 2014, 14:04:00
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 * |
#8 · Zasláno: 18. 8. 2014, 14:10:26 · Upravil/a: Icka
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 |
#9 · Zasláno: 18. 8. 2014, 14:16:32
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 * |
#10 · Zasláno: 18. 8. 2014, 14:16:40 · Upravil/a: Icka
áá jasně, už to máám , děkuji mnohokráát!!
šikovný lidi sou tu ;-) |
||
Časová prodleva: 10 let
|
0