Diskuze: databáze s texty písní
V předchozím kvízu, Online test znalostí PHP, 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í PHP, jsme si ověřili nabyté zkušenosti z kurzu.


Ahoj, vůbec nerozumím principu tvých tabulek. Já bych na to šel stromově - skupiny -> alba -> songy. Poté bych vypisoval záznamy dle požadovaného klíče do html šablony. Také by bylo vhodné použít OOP nebo se v tom ztratíš. Tutoriál na dotazy přes více tabulek nalezneš zde: Dotaz přes více tabulek
Přesně jak říká Jarda. Udělej si tabulku "skupiny", tabulku "alba", kde bude jako cizí klíč figurovat ID skupiny a tabulku "songy", kde budou cizí klíče ID skupiny a ID alba (ID skupiny tam nutně být nemusí, ale nic se nezkazí, když tam bude)...
Pozor na to, že jedna pesnička môže byť na viacerých albumoch, že jedna pesnička a/alebo jeden album môže mať viacero interpretov, ...
Zdravím,
přesně takto to mám dělané. Mám tabulku skupiny, alba a songy. Umím z
nich dostat, vše co potřebuju, ale nejde mi to dostat do té formy, kterou
jsem popsal HTML kódem nahoře. Tzn výpis alb a vedle toho od každého alba
rovnou i výpis songů.
Přijde mi divný, že musím x krát vypsat $album=... pro každé album v
databázi a následuje výpis písniček.
Chci, abych zadal jen $skupina=... a vypsali se písničky roztříděné dle
alb.
nebylo by lepší použít nějaký framework? ten špagety kod se špatně čte
Album : nazev_alba album rok skupina
Song : track_no nazev_songu song album skupina
skupina: id_skupina, nazev
album : id_album, nazev, rok, id_skupina
song: id_song, nazev, id_album, id_skupina
Takovato struktura ale predpoklada, ze album nemuze vydat sam zpevak,
pripadne ani song. A rovnez to neresi prechody zpevaku mezi skupinami nebo clenu
skupiny jinam. Nebo se jim treba bubenik vyboura, tak maji jineho. Ale ve tvem
pripade budou vsechna alba pod stejnou skupinou se stejnymi lidmi, asi. To by
musela byt asi specialni nova skupina s jinym datumem zalozeni, se setjnym
nazvem, jinymi osobami. Coz by pak ale komplikovalo vyhledavani
Musela by tam byt nejaka vazba, ze
je to soucasne stejna skupina a soucasne uplne jina, kdyz si to clovek rozklikne
u pisnicky....
No, dost uvah. Takze:
skupina: id_skupina, nazev
album : id_album, nazev, rok, id_skupina
song: id_song, nazev, id_album, id_skupina
vypis skupin:
SELECT nazev FROM skupina
vypis pisnicek podle skupiny id
SELECT nazev FROM song WHERE id_skupina=123
vypis pisnicek podle skupiny nazev
SELECT nazev FROM song
LEFT JOIN skupina ON skupina.id_skupina = song.id_skupina
WHERE skupina.nazev='abc' // nebo LIKE='abc%'
A ted by to slo cele udelat slozitym sql dotazem, a na to bohuzel nemam v soucasnem stavu. Alternativne to jde resit php cykly.
str = '';
$query = "SELECT id_skupina, nazev FROM skupina WHERE nazev LIKE '%s%'";
$query = sprintf($query, mysql_escape_string($skupina))
$result_skupiny = mysql_query($query);
while ($row_skupiny = mysql_fetch_assoc($result_skupiny))
{
$str .= radekSkupina($row_skupiny);
$query = "SELECT... WHERE id_skupina=%d"; // dotaz pro alba
$query = sprintf($query, $row_skupiny['id_skupina']))
$result_alba = mysql_query($query);
while ($row_alba = mysql_fetch_assoc($result_alba))
{
$str .= radekNecoDalsiho($row_alba);
}
}
echo $str;
Jo, a ja bych tu funkci pro zacatek dal vsem spolecnou. A pak ji upravil na tabulku nebo mozna ul-li strom.
function funkce ($row, $lvl) {echo $lvl.$row['nazev'].'<br>';}
funkce ($row_skupina, '');
funkce ($row_album, ' '); // 2 mezery pred
funkce ($row_song, ' '); // 4 mezery pred
Jo, pokud predpokladas, ze vse bude zarazene, do alba a skupiny, pak je uplne zbytecne mit
song: id_song, nazev, id_album, id_skupina
song: id_song, nazev, id_album
Protoze pisnicka je vzdy soucasti albumu a pres id_album se dostanes k id_skupina.
A take by mozna bylo lepsi si na sql udelat funkci (vsprintf) nebo class. Pozdeji to mozna budes chtit predelat na pdo a musel bys pak vsude dohledava a menit. To je lepsi pouzit jeden include navic (php.net/include)
function sql($query='', $data=array())
{
foreach ($data as $key=>$value) {$data[$key] = mysql_escape_string($value);}
$query = vsprintf($query, $data);
return mysql_query($query);
}
}
Jo, a ty zavinace na zacatku potlacuji chyby. Kdybys na sql mel funkci, staci to pridat na jeden radek v ni. Ale pro ladeni programu e lepsi tam zavinac zas nemit. @$vysledek
Zobrazeno 10 zpráv z 10.