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.
Člen
Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.