Autor Zpráva
Chatík
Profil
Dobrý den,
chtěl bych se zeptat jestli by šel nějakým způsobem zjednodušit následující script:
http://pastebin.com/QfvneCEL

Osobně mi připadá že dost vytěžuje db. Ale může jít i zdání.
Spíše mi jde o zabezpečení atd.
Musím se přiznat že vůbec nevím co s tím budu dělat až nastane nepodpora Mysql a bude jen Mysqli.
Mohl by mi někdo nastínit jak velký zásah budu muset provést po tom až bude podporována jen Mysqli?
Děkuji za veškeré postřehy a rady.
To co script dělá je zde: http://country.funsite.cz/uprava.php?interpret=Johnny%20Cash
Po kliku na název alba se zobrazí info o albu.
Ještě jednou díky za rady
Lkopo
Profil *
Preto je čo najlepšie si aplikáciu programovať v OOP. Potom bude MySQLi len lahôdka.
Tori
Profil
Chatík:
• ř.52: vyhodila bych WHERE a nechala jen podmínku. Pak ji můžete dosadit bez úprav do jakéhokoli kontextu ("WHERE $podminka", ".. AND $podminka", "JOIN ... ON $podminka").
• ř.59 - ten dotaz dělá dvě různé věci. Přinejmenším poddotaz (SELECT COUNT(Album) FROM (SELECT * FROM zahranicni $where GROUP BY Album ) p) AS pocet by šel přepsat na $sql = 'SELECT COUNT(DISTINCT Album) FROM zahranicni'.($where ? 'WHERE '.$where : ''); A pak to zkuste ještě rozdělit na dva samostatné dotazy a změřit, jestli to bude pomalejší nebo ne.
• ř.66 bych vyhodila, viz to, co jsem psala k ř.52
• ř.67 - z tohoto SQL dotazu je vidět špatný návrh databáze, máte všechno v jedné tabulce, hodně dat se vám nutně musí opakovat. Přečtěte si něco o návrhu a normalizaci databáze. V podmínce WHERE Album IN('".(Implode("','",$albs))."') {$where} děláte IMHO dvakrát totéž - alba v proměnné $albs jste získal pomocí podmínky $where z té samé tabulky, takže obě podmínky by měly vracet stejnou množinu dat, myslím si. A zkuste porovnat vrácené výsledky, pokud byste místo ORDER BY FIELD(Album,'".(Implode("','",$albs))."'),Album ASC,Track ASC řadil ORDER BY `Year`, Album, Track, jestli to taky nebude dělat totéž.
• ř.91 a další - Pro zápis seznamu do souboru byste mohl použít takový formát, který vám umožní zapisovat na konec souboru, bez načítání a přepisování celého souboru, např. .ini, YAML, CSV, nebo prostě jen každá hodnota na nový řádek. Kromě toho ta operace není atomická, může dojít k tomu, že v jiném vlákně (procesu) se přepíše soubor mezi načtením a zápisem v tomto vlákně, takže ztratíte část dat.
• ř.135 - nebylo by jednodušší rovnou ukládat do DB délku jednotlivých písniček jako dat.typ TIME a pak si to (v SELECTu nebo v PHP) zformátovat na min:sec?
• ř.53,57,156–159 - do proměnné $interpretQ bych dala jen čistá data z GET, a úpravy (doplnění ampersandu mezi GET parametry + urlescape) řešila až okolo řádku 156 při vkládání do URL.

edit: Ještě byste mohl trochu uklidit kód - srovnat odsazení, psát názvy funkcí a if/else jen malými písmeny, doplnit složené závorky k cyklu for apod.
Chatík
Profil
Díky za návrhy, ačkoliv se může zdát že jde o špatný návrh tabulky v db tak bohužel myslím že s tím nic neudělám.
Veškeré informace tvoří program MP3tag a ukládá je do jednoho CSV které následně nahrávám do DB.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: