PHP vagy MySQL oldalon érdemes számításokat végezni?
Szeretném tisztázni, hogy a kérdés jelenleg csak egy elméleti weboldalra vonatkozik, hogy nagyon tisztán meg tudjam fogalmazni a kérdésem. Ez néha olyan dolgokhoz vezethet, ami egy valós weboldalon biztos nem úgy működne, ahogy itt bemutatom.
Tegyük fel, hogy van egy könyveket árusító weboldal, ahol lehet értékelést hagyni egy könyv minőségéről (1 és 5 között). Mivel az oldal nagyon minimalista, ezt nem a szokásos ötcsillagos izével oldja meg, ahol minél nagyobb az értékelés, annál nagyobb része sárga a csillagoknak, hanem egyszerűen kerekíti az értékelések átlagát, és a kerekített értéknek megfelelő mennyiségű csillagot ír ki. Pl. ha egy könyv értékelése 4.2, akkor a cím mellett '****' jelenik meg, ha 2.8, akkor '***'.
Az adatbázisban el van tárolva minden értékelés, így ezeket átlagolni kell, majd a nekik megfelelő mennyiségű csillagot kiíratni. Erre alapvetően három lehetőséget látok:
1. Egy könyvhöz tartozó minden értékelést lekérni az adatbázisból, hogy ezeket a PHP átlagolja, majd a megfelelő mennyiségű csillagot kiírja.
2. Az átlagot(kerekítve) lekérni az adatbázisból, majd ezt a számot PHP-val csillaggá alakítani s kiírni.
3. Egy CASE segítségével a kiszámolt átlagból a MySQL hozza létre a csillagokat és küldi azokat a PHP-nek, ami nem csinál vele semmiféle logikát, csak kiírja azt.
Az 1. verziót elég nagy sületlenségnek tartom, sok értékelés esetén óriási mennyiségű adatot küldözgetünk fölöslegesen az adatbázis és PHP között. A 2. és 3. között viszont melyik a jobb? Gyorsabb valamelyik számottevően, vagy csak a kód érthetősége befolyásolja, melyikkel érdemes dolgozni?
Előre is köszönöm a válaszokat.
Pont ugyanannyi adatot kérsz le az 1-es és a 2-es esetben.
Tök mindegy, hogy az jön vissza, hogy 3 vagy 2,8.
A 3-as a sületlenség, olyat ne csinálj, hogy 2,8 helyett ez a string jön vissza: "***"
A formázás nem az adatbázis dolga.
Én azt csinálnám, hogy az oldalon látható könyveknek az értékeit kérném le.
Tehát nem 10 millió könyvét, hanem ha valaki rákeres Asimovra és megjelenik a képernyőn 60 tétel, akkor annak a 60 könyvnek.
Tehát az 1-esnek egy optimalizált változatát.
"A formázás nem az adatbázis dolga."
Mondjuk ez is igaz.
Mindenképpen 2.
1. esetében semmi értelme átpaszírozni egy rakás adatot, ha úgysem használod másra csak átlagolásra.
3. Meg marhasag. A megjelenítés nem a backend dolga.
2-es megoldás.
Az 1-es ugye fölöslegesen sok adatot adna át, hisz neked csak az átlag kell.
A 3-as pedig megbontja a logikát. A kijelzés, formázás nem az adatbáziskezelő dolga. Azon kívül ha később pl nem sima csillagokat akarsz kirakni, hanem pl. ikonokat, sokkal könnyebb, ha az adatbázis csak a konkrét átlagot adja vissza.
Én amúgy még az átlag kerekítését is a PHP-re bíznám, de ez már egyéni preferencia.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!