Autor Zpráva
xhelliosx
Profil
Ahoj, moc rád bych, kdyby mi byl někdo schopen malinko pomoct s tím, co mám udělat, abych mohl vyřešit dané otázky. SQL je pro mne španělská vesnice, ještě chápu, jak se ptát na položky v jedné tabulce příkazem select, ale když mám více tabulek dohramady, tak to nedávám. Ocnil bych třeba jen příklad, jak to konkrétně mám dělat a zbytek bych snad už pochopil. Děkuji.
Kajman
Profil
Mrkněte např. na seriál www.linuxsoft.cz/article_list.php?id_kategory=232
a tam na kapitoly 20-27.
xhelliosx
Profil
No já právě nechápu, jak mám vyhledat v tom mém príkladu, třeba ta první otázka bere data ze 3. tabulek, takže bych to měl formulovat SELECT jmeno,Prijmeni,D_VYP..... a z jaký tabulky brát?? Jsem asi hloupej.
Kajman
Profil
Spojení tabulek je v kapitolách 20 a 21. Tipuji, že jste je stále nečetl.
www.linuxsoft.cz/article.php?id_article=827
www.linuxsoft.cz/article.php?id_article=837
xhelliosx
Profil
Kajman:
dobře, zkusím to, jak jsem to pochopil,
SELECT ID_Ctenare(555),jmeno,Prijmeni,D_VYP,EVID_CIS
FROM vypujcka JOIN ID_Ctenare_vyp=ID_Ctenare, JOIN EVID_CIS=EVID_C

tak takhlejsem to pochopil já, jiank už fakt nevím
Tomášeek
Profil
xhelliosx:
tak takhlejsem to pochopil já, jiank už fakt nevím
Můžeš odkázat na konkrétní příklad, který toto tvrdí z těch dvou kapitol? Jen napovím, že ta správná kapitola pro řešení tohoto příkladu je ta s číslem 21. Škoda, že ses zasekl hned na té první uvedené.
xhelliosx
Profil
SELECT ID_Ctenare(555), jmeno, Prijmeni,D_VYP, EVID_CIS
FROM vypujcka JOIN ctenar ON ID_Ctenare_vyp=ID_Ctenare,
FROM vypujcka JOIN exemlar ON EVID_CIS=EVID_C

je to lepší?
Keeehi
Profil
No, ještě se nauč, jak se filtrují data.
www.linuxsoft.cz/article.php?id_article=819

Nebo ještě lépe, přečti si celý seriál.
xhelliosx
Profil
SELECT ID_Ctenare, jmeno, Prijmeni,D_VYP, EVID_CIS
FROM vypujcka
JOIN ctenar ON ID_Ctenare_vyp=ID_Ctenare
WHERE ID_Ctenare=555 vypujcka
JOIN exemplar ON EVID_CIS=EVID_C

další pokus po přečtení
nemám nainstalovanou tu databázi, ve škole nám dala jen tento obrázek, odříkala příkazy a já na to teď koukám jak tele na nový vrata,tak se omlouvám
Keeehi
Profil
No, skoro dobře. To where patří až za všechny joiny.

No a ještě ti tam podle zadání chybí to řazení.
xhelliosx
Profil
Moderátor Kajman: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).

SELECT ID_Ctenare, jmeno, Prijmeni,D_VYP, EVID_CIS
FROM vypujcka
JOIN ctenar ON ID_Ctenare_vyp=ID_Ctenare
JOIN exemplar ON EVID_CIS=EVID_C 
WHERE ID_Ctenare=555 vypujcka
ORDER BY evid_c DESC

tak snad konečně
Tomášeek
Profil
xhelliosx:
tak snad konečně
Pokud to vybere správná data, tak ano, konečně. Pokud to správná data nevybere, bádej dál. Spousta (i jednoduchých) SQL dotazů pracujících s více tabulkami a tedy i JOINem se dá najít kromě odkázaného tutoriálu i zde na diskusi. Zkus je pohledat.

nemám nainstalovanou tu databázi
Tím jsi měl začít. Bez možnosti testovat své výtvory se nikam nepohneš (nepočítám metodu "napíšu na DJPW a počkám, až to za mě někdo udělá, výsledek pak jen zkopíruju a budu mít úkol hotový"). Nainstaluj si lokální webserver, databázi a jednotlivé příklady od lehčích po těžších (v tutoriálu) si zkoušej, ať pochopíš, co dělají. Upozorním tě, že naučit se základ SQL včetně pochopení (a zpracování vybraných dat, typicky v PHP) není otázkou hodiny ani odpoledne, budeš tomu muset věnovat řádově více času.
Keeehi
Profil
Lokální databáze je určitě vhodné řešení které bych doporučil. V nouzi nejvyšší se dá ještě použít sqlfiddle.com nebo ideone.com ale praktické to není, jelikož je to příšerně pomalé.
Kajman
Profil
xhelliosx:
Při spojování tabulek je dobré před sloupci uvádět, ze které tabulky jsou. Hlavně je to potřeba, pokud by se ve více tabulkách jmenovaly stejně sloupce, se kterými se v dotaze pracuje. Pro lepší orientaci lze použít aliasy (např. v, c, e).

SELECT c.id_ctenare,
       c.jmeno,
       c.prijmeni,
       v.d_vyp,
       v.evid_cis
FROM   vypujcka v
       JOIN ctenar c
         ON v.id_ctenare_vyp = c.id_ctenare
       JOIN exemplar e
         ON v.evid_cis = e.evid_c
WHERE  c.id_ctenare = 555
ORDER  BY e.evid_c DESC 

Váš dotaz by také asi fungoval, jen tam je ve where části nesmyslné slovo vypujcka. A pokud budete řadit podle v.evid_cis, tak nepotřebuje vůbec připojovat tabulku exemplar.

Souhlasím, že na naučení je lepší si ty dotazy zkoušet. Na mysql se dá použít např. demo admineru, to bývá svižné, ale musíte si pak dotazy ukládat někam k sobě a také si vytvořenou databázi vyexportovat a uložit pro příští použití.

Lokálně pak můžete použít i databázi SQLite, která se neinstaluje do systému jako služba, ale klient jednoduše vytvoří někde na disku soubor. Klientem může být např. plugin do firefoxu.

Pro zkoušení dotazů si samozřejmě musíte ty tabulky vytvořit a naplnit provázanými daty. Škoda, že vám učitelka nachystanou databázi nedala k dispozici.
xhelliosx
Profil
moc děkuji za rady

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: