Autor Zpráva
panterek
Profil
Zdravím,

potřeboval bych dotaz ke spojování tabulek...resp. nechci tabulky spojovat, ale aby mi dle sloupce "kod", vypsal údaje jen z té tabulky, ve které se daný kód nachází...zkoušel jsem něco jako:

SELECT * FROM dvd JOIN ptbl_dvd WHERE ptbl_dvd.kod='111020048' OR dvd.kod='111020048' ...jenže to vyjede moooc nepodstatných věcí.

...prostě napíšu kód, třeba "12345" a on proleze tabulky, které mu nadefinuju a jakmile narazí na shodu, tak vypíše jen jeden řádek z té tabulky, ke které tento kód patří...byla by rada?
tiso
Profil
panterek: pospájaj cez UNION dotazy na jednotlivé tabuľky...
Inak zaváňa to nesprávnym návrhom databázy, mal by si začať tam.
panterek
Profil
No, co jsem si přečetl o UNION, tak tabulky musí mít shodný počet sloupců, což v mém případě není :(
Kajman_
Profil *
Nemusíte dávat *, stačí si vyjmenovat z obou tabulek obdobné sloupečky, pak union půjde.
panterek
Profil
A když chci všechno? :-)

pro lepší představu, tabulka DVD má např sloupce: kod, mpeg, snimace, do, zd_displeje
Tabulka ptbl_dvd má sloupce: kod, mpeg,snimace,do, zd_displeje, invertory, displeje

A já napíšu kód a dle něj se mi vypíší údaje o náhradním díle. Takže pokud se najde shoda kódu, potřebuji výpis všech sloupečků dle tohoto kódu.
Kajman_
Profil *
Tak si udělete dva dotazy, když ta data spolu nesouvisí.
panterek
Profil
Dva dotazy znamenají celkem komplikaci v kódu...komplikaci v tom smyslu, že vlastně musím udělat to samé, ale pro další kategorii..

Je to databáze pro sklad náhradních dílů + odpisy opravených výrobků...mám to už snad z 90% hotové pro kategorii DVD...Jsou tam ještě přenosné DVD a Autorádia..Funguje zatím jen DVD..a pro každou kategorii mám jednu tabulku, pač struktura těch dílů není úplně stejná...možná by to šlo všechno vměstnat do tabulky jedné, ale měla by X sloupců, čehož jsem se trochu bál...navíc musím rozlišit, jestli ten Snímač patří do kategorie DVD, Přenosných DVD nebo Autorádií...
tiso
Profil
panterek: ako som písal - zlý návrh databázy...
panterek
Profil
tak, chybama se člověk učí, že :)...ikdybych to měl předělat, tohle je web, který potřebuji ke své práci, tak jestli bys poradil, jak by se to dalo řešit..?
tiso
Profil
panterek: to je nadlho, takže nie...
panterek
Profil
jj, chápu, nějak to už doklepu...tímto vláknem jsem měl na mysli hlavně to, jestli existuje dotaz, který prohledá všechny tabulky a dle nějakého jedinečného klíče vypíše obsah té tabulky, ve které se tento klíč obsahuje...pokud takový příkaz není, najdu jiný způsob...dík
tiso
Profil
panterek: môžeš si v tom dotaze predávať názov tabuľky v ktorej hľadáš a potom spraviť selekt na tú konkrétnu tabuľku. Čiže jedným dotazom zistíš v ktorej tabuľke dáta sú a v druhom už vytiahneš konkrétny záznam:
SELECT 'dvd' AS tablename FROM dvd WHERE dvd.kod='111020048' 
UNION
SELECT 'ptbl_dvd' AS tablename FROM ptbl_dvd WHERE ptbl_dvd.kod='111020048'
...
panterek
Profil
aha, no, to by mě nenapadlo...a v podstatě by to tento problém řešit mohlo. Zkusím...díky
panterek
Profil
Tak funguje to...já bych byl schopný to celé kvůli tomu překopat, ještě žes přišel s touhle myšlenkou..zítra, max pozítří už budu schopen podle toho pracovat..díky moc
tiso
Profil
panterek: Pomohlo by vytvoriť tabuľku v ktorej by si mal zoznam kódov v jednotlivých tabuľkách, potom by si to nemusel riešiť cez UNION. Musel by si ale zabezpečiť aktuálnosť tej tabuľky pri zmenách v jednotlivých tabuľkách s náhradnými dielmi. Ktoré riešenie je lepšie záleží od toho ako sa s tým bude reálne pracovať (optimalizácia na zápis, na čítanie)...
panterek
Profil
V tom UNION nevidím problém..nějak jsem to udělal a funguje to, nechal bych to tak. Sice se ten kód kapku znepřehlednil, ale když se to udělá pořádně, tak už do toho stejně zasahovat nebudu :)
panterek
Profil
Tak to asi udělám následovně..bude jedna tabulka s dílama, ta bude mít co sloupec, to náhradní díl a jeden sloupec navíc, který bude třídit kategorie (dvd, autoradia, ptble_dvd)..vždy se po vypsání dílu vypíše taková kategorie, kam to patří..tím pádem bude vše v jedné tabulce, byť trochu rozšířenější..

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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