Diskuze: Úprava výpisů z databáze
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 16 zpráv z 16.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ach bože, občas mám vážně pocit, že lidi, kteří sem chodí, to nemají v hlavě v pořádku. Když dostaneš mínus, asi to něco znamená. Co třeba se nad tím zamyslet?
Napiš aktuální výsledek a očekávaný výsledek, formuluj otázku a pak ti můžeme pomoct.
Chci jen jeden prispevek a v nem toto:
Nazev, composer, text skladby toto vse jen jednou a vsechny interprety.
Nyni je to tak jak na screenu.
ze je tech prispevku nekolik a vzdy jinej interpret a ostatni je stejne.
Takze to co je stejne bude jen jednou a u interpretu budou vsichni interpreti
vypsani.
Chtel jsem hned reagovat stejne urazlive jako ty, ovsem rekl jsem si ze nemam ru potrebu.
Pořád to je dost zmatené. Prostě chceš vypsat písničky, které máš v databázi - jejich název, skladatele, text a interpreta? Ten tvůj kód je nepoužitelný, takže tu ti ukážu, jak by to mohlo fungovat obecně:
id | nazev | skladatel | interpret | text |
1 | Píseň 1 | Skladatel 1 | Interpret 1 | 1 |
2 | Píseň 2 | Skladatel 2 | Interpret 2 | 2 |
Nevím, proč máš text v jiné tabulce, ale budu předpokládat, že proto máš důvod:
id | text |
1 | Text písně 1 |
2 | Text písně 2 |
Písně si vybereš v SQL dotazu:
SELECT * FROM `pisne`
JOIN `texty`
ON
`texty`.`id` = `pisne`.`text`
V PDO si na dotaz zavoláš metodu fetchAll a vypíšeš:
$pisne = $dotaz->fetchAll();
V šabloně - oddělené od logiky - si písně vypíšeš pomocí foreach. Nevím, jestli je to to, co jsi chtěl, celý tvůj dotaz je dost zmatený a ani v kódu si toho moc nepřečtu. Takže pokud jsi nedostal očekávanou odpověď (a to nemyslím nijak ofenzivně), zkus otázku znovu přeformulovat.
Kódy jsou netestované a je velká pravděpodobnost, že v nich bude chyba.
Třeba pomůže toto:
http://www.jpeg.cz/…11/6rdbZ.png
http://www.jpeg.cz/…/11/0JQm.png
Aha, už asi rozumím. Ke každé písni tedy patří jeden nebo více interpreterů. V tom případě bys měl vytvořit tabulku pro interpretery a další speciální tabulku, která bude tyto dvě tabulky spojovat. Tahle "asociační tabulka" bude mít tři sloupce: ID, PISEN_ID, INTERPRET_ID. Až se budeš v PHP ptát, jaké má píseň interprety, necháš si vypsat všechny řádky z této tabulky, které mají dané PISEN_ID. Tak dostaneš několik INTERPRET_ID, které si spojíš s tabulkou s interprety. Jestli potřebuješ nějaký orientační kód, klidně si řekni.
Diky.
Jsem rad ze jsme se nekam dostali.
A hlavne slusne.
Je nejaka moznost to udelat i bez pouziti dalsi tabulky?
Pokud ano, popostrcit me nejakym kodem?
Dekuji
Tato tabulka využívá obou klíčů a nazývá se vazební. Je to běžná praxe, tudíž se toho nemusíš bát. Pokud vím, tak minimálně MySQL to jinak neumí.
Nepochopil jsem přesně co si teď tímto myslel.
Databáze MySQL tuto vazbu jinak nezvládá. Proto potřebuješ další tabulku, která ti spojí data v jiných dvou a více tabulkách. Můžeš pak mít takový sloupec s aditivní schopností (=můžeš přidávat kolik řádků chceš). Nebo se můžeš podívat po jiných databázích, které by tuto vazbu zvládaly (nejsem si jistý, jestli taková existuje, pracuji jen s MySQL). Více se o tom dozvíš ve zdejším tutoriálu (měli by to být posledních několik dílů). http://www.itnetwork.cz/…ze-tutorialy
Jsme v sekci php a věřím tomu že pomocí PHP toho docílit jde.
Nechci to dělat pomocí sql dotazu.
Takže víceméně tento řádek
$query = "SELECT l.skladba, s.Title, s.Artist, s.Composer FROM `lyrics` as l left join songs as s on s.Text = l.text_id WHERE s.`Text` = '$promena'";
zůstane zachován, a po té pomocí php to udělat tak jak potřebuji.
V prvním příspěvku je vidět screen z toho co mi ten script vyhazuje.
A teď jen pomocí PHP to udělat tak jak potřebuji.
Zkusím si s tím pohrát a výsledek sem potom dám.
Budeš zbytečně třídit data v PHP, místo toho, aby sis vybral v SQL přesně to, co potřebuješ. Proč to komplikuješ? Zvlášť, když PHP moc neovládáš. SQL s PHP souvisí jako IT s počítačem. Jestli chceš rady ohledně PHP:
To jsou nejdůležitější, nejzákladnější a velmi nezbytné věci, které musíš ovládnout.
a prejdi na novsi ovladac - na PDO (PHP Databaze Object), ktory ani nepotrebuje escapeovat, kedze pouziva prepared statements a vo verzii PHP 7 uz sa s ovladacom mysql_ nepocita a momentalne v PHP 5.x sa povazuje za zastaraly
Nechápu proč by to neměl mít v hlavě v pořádku. Toto je celkem starý postup, setkávám se s tím, poměrně často, když mám upravit starší aplikace..
Náhodou, plus za to, že to escapuje. Spíže lidé co dávají mínus aniž by uvedli důvod to nemají jaksi srovnané. Kolikrát mám dojem, že nerozumí dotazu tak proč nedat mínus..
michales: Je fakt, že je to zastaralí ovladač, přejdi na PDO jak radí mkub.
Taky jsem neříkal, že to nemá v hlavě v pořádku, když používá mysql_. To už jsem psal do seznamu věcí, které by měl v první řadě změnit.
Všude na internetu lidi za tyto funkce dostanou vynadáno, téměř ve všech novějších návodech upozorňují, že jsou funkce mysql_ deprecated, dokonce myslím, že ti PHP taky vyhubuje, že je používáš, tím si ale nejsem jistý. Každopádně mě jenom zajímalo, kde se takové funkce naučil, pokud tedy není věčným studentem od roku 2009. Rozhodně bych ho za to ale neukamenoval, byla to jen věcná poznámka, že to je špatně.
Naštvalo mě, že nedokáže normálně formulovat otázku (až na potřetí a to pomocí obrázku), přestože se jedná o triviální záležitost. Proto se lidem ani nedivím, že otázce nerozuměli.
Zobrazeno 16 zpráv z 16.