Autor | Zpráva | ||
---|---|---|---|
Kalby Profil |
#1 · Zasláno: 27. 2. 2008, 10:34:33
Dobrej mam trosku slozitejsi dotaz na DB ale nefunguje mi :/ importuju nějaká data do tabulky lekarna_prodej_import, kde jsou údaje jaká lékárna co prodává, a tabulku přípravky kde je seznam přípravků které lze prodávat. A teď potřebuju zjistit když nějaká lékárna začne prodávat nový přípravek, který ještě v tabulce přípravky není aby se mi vypsal. Jinak samozřejmě ten samý přípravek prodává více lékáren, ale poté už se znova nesmí přidat do přípravků protože by tam byl samozřejmě dvakrát a to nechci a to mi to bohužel dělá..
Snad je to trošku pochopitelné :) prostě: Vezmu záznam z tabulky lekarna_prodej_import, kde je uloženej přípravek pod nějakým kódem ( v tomto případě 'sukl') zjistím zdali se tento kód nachází v tabulce přípravky ('kod_excel') kdyz ano nic nevypisuji kdyz ne tak ho vypíšu aby se mohl přidat. Takhle vypada dotaz "SELECT DISTINCT sukl, lekarny_prodeje_import.nazev AS excel_nazev FROM lekarny_prodeje_import LEFT JOIN pripravky ON CAST(lekarny_prodeje_import.sukl AS UNSIGNED)=pripravky.kod_excel WHERE pripravky.id IS NULL ORDER BY lekarny_prodeje_import.nazev" |
||
ninja Profil |
#2 · Zasláno: 27. 2. 2008, 11:16:44
Kalby: moznych duplicit u pripravku se zbavis tim, ze sloupec pripravky.sukl udelas jako UNIQUE, respketive zde asi rovnou PRIMARY.
Obecne, je tva siuace ze mas tabulku kde jsou lekarny a vedle toho tabulku s pripravky, pricemz stejny pripravek muze prodavat N lekaren a kazda lekarna prodava N pripravku? V tom priprade se jedna a klasickou vazbu M:N a to se resi 3. tabulku s vazebnimy klici. LEKARNA id nazevlekarny adrese vedoucilekarny PRIPRAVEK id nazevpripravku cena VAZBALP lekarna_id pripravek_id Dotaz na pripravky prodavane lekarnou s id 4: SELECT l.*, p.* FROM lekarna l LEFT JOIN vazbalp vlp ON l.id = vlp.lekarna_id LEFT JOIN pripravek p ON vlp.pripravek_id = p.id WHERE l.id = 4; |
||
Kajman_ Profil * |
#3 · Zasláno: 27. 2. 2008, 12:51:44
Kalby
Dotaz vypadá v pořádku. Když nic nevypíše, ale proběhne bez chyby, tak tam asi jen nejsou žádné neprovázané přípravky. Zkusil bych ve where dát pro kontrolu is not null, kde by to mělo vypsat všechny správně provázané.. |
||
Kalby Profil |
#4 · Zasláno: 27. 2. 2008, 14:04:45
no ono to nic nevypise to je spravne, zkousel jsem i pridat nove do lekarny a pak to vypise tu nove pridanou, ale problem nastal s nove importovanymi polozkami, ktere meli o rad vyssi kod, ale to nechapu proc, predtim byl sestimistny ten novy je sedmimistny ale to by na to nemelo mit vliv, obe pole jsou nastavena na varchar delky 10. Jinak tu kontrolu s not null jsem zkoušel a vypsalo to všechny kromě těch nových s tím vyšším číslem
|
||
Kajman_ Profil * |
#5 · Zasláno: 27. 2. 2008, 14:58:05
Pokud jsou obě pole varchar, tak proč tam máte cast? Nemůže být problém tam?
|
||
ninja Profil |
#6 · Zasláno: 27. 2. 2008, 15:32:11
Kalby: spojovat tabulky pres sloupce typu varchar je hodne spatne, rychlost bude velmi spatna.
|
||
Časová prodleva: 16 let
|
0