Diskuze: Výběrový dotaz s parametrem z jiné tabulky
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 10 zpráv z 10.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
Obrázek relací a struktury tabulek
dotaz je pro tabulku uci_predmety
Předpokládám, že máš vybraného vyučujícího a k němu chceš
přiřadit předměty, tedy ID_vyucujici je známé.
Můžeš zkusit třeba něco takového
SELECT ID_predmetu, Nazev_predmetu FROM Predmety WHERE ID_katedra IN (SELECT Katedra FROM Vyucujici WHERE ID_vyucujici = id_vybraneho_vyucujiciho)
P.S. Diakritika do názvů sloupců či tabulek rozhodně nepatří, mohlo by se ti to později vymstít...
Ano vyučujícího mám vybraného (vybírám jako první pole), ale v takovém případě pokud zadám upravený SQL příkaz
SELECT Predmety.ID_predmetu, Predmety.Nazev_predmetu, Vyucujici.Katedra FROM Predmety WHERE Predmety.ID_katedra IN (SELECT Katedra FROM Vyucujici WHERE Vyucujici.ID_vyucujici = uci_predmety.ID_vyucujici);
vyvolá se okno zadat hodnotu parametrů uci_predmety.ID_vyucujici a Vyucujici.Katedra, tomu se chci vyhnout, chci automatizaci bez nutnosti vyplňovat parametr.
Diakritiku jsem opravil děkuji za upozornění.
Asi jsem to špatně vysvětlil.
v tabulce „uci_predmety“ jsou dva primární klíče, které v relaci N:M
odkazuji na Vyucujici.ID_vyucujici a Predmety.ID_predmety dle relací
přiložených v obrázku u původního dotazu.
Potřebuji vytvořit, když v tabulce „uci_predmety“ vyberu v prvním poli
„ID_vyucujici“ ze seznamu vyučujícího, tak aby se ve druhém poli
„ID_predmetu“ v seznamu zobrazili pouze předměty, které se učí na
katedře, ke které je přiřazen i vyučující. Pokud vyberu jiného
vyučujícího, který je z jiné katedry, tak se zobrazí zase jen předměty z
katedry, ke které je přiřazen i ten vyučující.
přikládám obrázek
přikládám i ukázku tabulek vyucujici predmety a katedry a ostatní
Tak ten select v závorce předělej na tu tabulku uci_predmety
Select id_predmetu from uci_predmety where id_vyucujici = vybrane id
A zbytečně do toho dotazu nemusíš dávat názvy tabulky, když nepoužíváš JOIN
v mysql bych napsal toto:
SELECT
`vp`.`id_vyucujici`,
CONCAT(`v`.`prijmeni`, ' ', `v`.`jmeno`) AS `vyucujici`,
GROUP_CONCAT( `p`.`predmet_nazev` ORDER BY `p`.`predmet_nazev` ASC SEPARATOR ', ') AS `predmety`
FROM
`vyucujici_predmety` `vp`
LEFT JOIN `vyucujici` `v` ON `v`.`id_vyucujici` = `vp`.`id_vyucujici` -- pripoj tabulku podle id
LEFT JOIN `predmet` `p` ON `p`.`id_predmet` = `vp`.`id_predmet` -- pripoj tabulku podle id
GROUP BY
`vp`.`id_vyucujici` -- vytvor skupiny podle id ucitele
ORDER BY
`vyucujici`
Jo, bylo by dobre, aby stejna id mela stejny nazev. Aby unikatni id tabulky
melo unikatni nazev. A abys dodrzoval jakesi jednotne pojmenovani, bud tam
pouzivej ucitel, ale ne vyucujici ani uci. Pak se v tom nevyznas. Zacnes priste
davat treba zkratky vyuc_ uc_ a pod 
v MS SQL:
select
p.ID_predmetu,
p.Nazev_predmetu
from
Predmety p
join Katedry k on p.ID_katedra=k.ID_katedra
join Vyucujici v on k.ID_katedra=v.Katedra
where
v.ID_vyucujici=vybrane_id_ucitele
Tuším, že v Access by měl být inner join místo
join.
Rozhodně je pravda, co píše Peter Mlich a to sice práce s názvy.
Osobně nemám rád ani ty podtržítka, ale to je věc zvyku.
Vzhledem k charakteru relace mezi tabulkami Vyucujici, Katedry a Predmety, tak bych řekl, že by mělo fungovat i toto:
select
p.ID_predmetu,
p.Nazev_predmetu
from
Predmety p
join Vyucujici v on p.ID_katedra=v.Katedra
where
v.ID_vyucujici=vybrane_id_ucitele
Protože podmínka vybírající konkrétního vyučujícího zajišťuje v této architektuře i výběr konkrétní katedry ...
Ta architektura zachycuje jen jeden rok (aktuální stav) ?
Zobrazeno 10 zpráv z 10.