Diskuze: Propojení více tabulek pomocí join a výpis s odkazy
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 9 zpráv z 9.
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.


Ahoj,
na prvni kouknuti bez vyzkouseni, v tom druhem dotazu se ptas na kategorie misto
na podkategorie. Takze ten dotaz uprav tak aby ses ptala i na nazev
podkategorie, ktery spojis s kategorii podle ID kategorie.
Zkušela jsem už dříve více variant a mezi nimi byla i tato:
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
// Filter the search query user input
$nazev = $_SERVER['QUERY_STRING'];
$nazev_kategorie = $_SERVER['QUERY_STRING'];
$nazev_podkategorie = $_SERVER['QUERY_STRING'];
$serie = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);
$databaze=" ";
$spojeni=mysql_connect(" ");
$co="(select nazev, nazev_kategorie, nazev_podkategorie FROM rocnik JOIN kategorie ON rocnik.id_rocnik = kategorie.id_rocnik JOIN podkategorie ON kategorie.id_kategorie = podkategorie.id_kategorie)";
mysql_select_db("checklist-ca4035") or die( mysql_error() );
$navrat=mysql_query($co, $spojeni) or die(mysql_error());
echo ("<h3><center>vybral jsi --- $serie</center></h3>");
while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
echo ("<a href=\"list.php?$serie\"><b></b>ODKAZ - $serie</a></br>");
}
}
else {
echo ("<h2><span><font size=\"3\">ERR $serie</font></span></h2>");
}
Výsledek je stejný jako předchozí kód:
vybral jsi --- 1994-95 - Opavia
a pod ním stále opakující se:
ODKAZ - 1994-95 - Opavia
ODKAZ - 1994-95 - Opavia
ODKAZ - 1994-95 - Opavia
ODKAZ - 1994-95 - Opavia
ODKAZ - 1994-95 - Opavia
Nejsem si jista, jestli správně dělám "query_string", když je tam více jak 2 proměnné? A v první části kódu mám pouze
echo ("<a href=\"list.php?$nazev&$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");
Když chceš "joinovat" z více tabulek bylo by dobré uvádět v dotazu i název té tabulky, do které ten sloupec patří...
SELECT [tabulka1.sloupec1, tabulka2.sloupec1]...
Co se tyce dotazu do DB tak by to mohlo vypadat treba takhle takze kdyz
ted koukam na tvuj prispevek tak mas zaklad dobre, ale je tam potreba doplnit
jeste where podminku, kde reknes, ze chces pouze rocnik a kategorii kterou jsi
predtim vybrala.
Co se tyce kodu, nejsem programator, takze ti v tom moc neporadim a necham to na
jinych, ale opet na prvni kouknuti, mam dojem, ze spatne zpracovavas ten vypis,
protoze v
echo ("<a href=\"list.php?$nazev&$nazev_kategorie\"><b></b>$nazev - $nazev_kategorie</a></br>");
nikde nepouzivas nazev_podkategorie, tak se ti tam logicky nemuze vypsat mas tam pouze kategorii a na zacatku odkaz, o kterem nepises ze bys ho tam primo chtela. Viz snad poradi nekdo jiny i kdyz nevim jak moc do sekce databazi zabrouzdaji ostatni.
Stále se mi nedaří přijít na to, co tam dělám špatně.
$co="(select nazev, nazev_kategorie, nazev_podkategorie FROM rocnik JOIN kategorie ON rocnik.id_rocnik = kategorie.id_rocnik JOIN podkategorie ON kategorie.id_kategorie = podkategorie.id_kategorie WHERE CONCAT(nazev, '-', nazev_kategorie)='$serie')";
Nebo s přidáním u selectu odkaz na tabulky
$co="(select rocnik.nazev, kategorie.nazev_kategorie, podkategorie.nazev_podkategorie FROM rocnik JOIN kategorie ON rocnik.id_rocnik = kategorie.id_rocnik JOIN podkategorie ON kategorie.id_kategorie = podkategorie.id_kategorie WHERE CONCAT(nazev, '-', nazev_kategorie)='$serie')";
Tento dotaz pro výběr je správně? Nikde jsem nenašla strukturu concatu pro více jak 2 tabulky.
A když to použiju do tohoto kodu
if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])){
// Filter the search query user input
$nazev = $_SERVER['QUERY_STRING'];
$nazev_kategorie = $_SERVER['QUERY_STRING'];
$serie = str_replace(array('%20', '&'), ' ' , $_SERVER['QUERY_STRING']);
$databaze=" ";
$spojeni=mysql_connect(" ");
$co="(select nazev, nazev_kategorie, nazev_podkategorie FROM rocnik JOIN kategorie ON rocnik.id_rocnik = kategorie.id_rocnik JOIN podkategorie ON kategorie.id_kategorie = podkategorie.id_kategorie WHERE CONCAT(nazev, '-', nazev_kategorie)='$serie')";
mysql_select_db("checklist-ca4035") or die( mysql_error() );
$navrat=mysql_query($co, $spojeni) or die(mysql_error());
echo ("<h3><center>vybral jsi --- $serie</center></h3>");
while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
echo ("<a href=\"list.php?$serie\"><b></b>ODKAZ - $serie</a></br>");
}
}
else {
echo ("<h2><span><font size=\"3\">ERR $serie</font></span></h2>");
}
Tak už mi to nic nevypisuje.
Pokud promenna $serie obsahuje spravna data, tak dotaz jako takovy takhle fungovat muze, zacal bych tedy kontrolou promenne $serie, pak bych hledal chybu v tom zpracovani dat a jejich vypisu.
Funguje pouze část
echo ("<h3><center>vybral jsi --- $serie</center></h3>");
ale pak tato část, co následuje za ní a měla by logicky navazovat, tak už mi to nic dalšího nevypisuje:
while (list($nazev,$nazev_kategorie,$nazev_podkategorie) = mysql_fetch_row($navrat)){
echo ("<a href=\"list.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>ODKAZ - $nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
}
}
Zkončí to pouze napisem, že člověk vybral data, jaká obsahuje proměnná $serie, ale už to nevypíše např.
1994-95 - Opavia - Tatranky
1994-95 - Opavia - Piškoty
1994-95 - Opavia - Věnečky
Můžete si mi prosím někdo podívat na while cyklus? Asi bude v tom někde chyba, ale vůbec netuším kde.
nevím, ale nemělo by tady
echo ("<a href=\"list.php?$nazev&$nazev_kategorie&$nazev_podkategorie\"><b></b>ODKAZ - $nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
být třeba uvedeno o jaké proměnné se jedná?
echo ("<a href=\"list.php?nazev=$nazev&nazev_kat=$nazev_kategorie&nazev_podkat=$nazev_podkategorie\"><b></b>ODKAZ - $nazev - $nazev_kategorie - $nazev_podkategorie</a></br>");
jak v tom "list.php" rozebíráš ten řetězec proměnných, abys určila, co kde má zobrazit?
Zobrazeno 9 zpráv z 9.