Többértékű mezők elemkre bontása, feloldása.
Söprögetek még mindig a saját házam táján (http://weblabor.hu/forumok/temak/101074) és az elmúlt években szerzett tudás és tapasztalat alapján felfedeztem néhány jelentős hibát...
Elemeztem az adattábláimat és néhányban találtam egy két klasszikus fogyatékosságot így neki is álltam a többértékű mezők felbontásának, majd azok feloldásának.
El is jutottam egy egész egyszerű felépítéshez, azonban a lekérdezéssel megakadtam. Lehet, hogy nem a lekérdezés miatt nem jutok tovább, elképzelhető, hogy nem jól közelítem meg a kérdést!
Ha egy termékeket tartalmazó táblát feloldottam két táblára, úgy, hogy az egyik tábla tartalmazza a termékeket, a másik pedig a termék árakat (mivel lehet egy terméknek több különböző ára), akkor az elképzelésem szerint én olyan lekérdezést készítenék, ami lekérdez minden terméket a termék táblából, majd minden egyes termékhez megszerzi az árakat. előfordul, hogy egy terméknek csak 1-2 ára van, azonban van olyan is, amelyiknek 5.
Arra gondoltam, hogy készítek egy nézetet a két táblából ezen feltételek figyelembe vételével, és majd ebből szolgálom ki az adatigényt.
És itt jön a gondom! Amíg a termék és az ár egy táblában volt, addig a lekérdezés eredményében a termék és az árak egy rekordként jelentek meg, azaz mid a termék, mind az összes ár egy sorban volt. Igen, volt olyan, amikor egy terméknél a lekérdezés eredménye sok-sok üres mezőt tartalmazott.
Mit tegyek? Olyan lekérdezést erőltessek, aminek az eredménye egy olyan nézet tábla, mint amilyen az eredeti táblám volt, azaz minden ár egy sorban szerepel a termékkel, vagy létezik lekérdezési eljárásé, amivel olyan lekérdezést tudok csinálni, ahol a termék egy rekord lesz, de az ár mező mégis tartalmazza az összes termékhez fellelhető árat. Lehet, hogy badarság, de mintha a rekordban az ár mező tömb lenne.
Kérlek titeket mutassatok utat! Nem megoldást várok, csak tapasztalt sql programozók véleményét.
■ Elemeztem az adattábláimat és néhányban találtam egy két klasszikus fogyatékosságot így neki is álltam a többértékű mezők felbontásának, majd azok feloldásának.
El is jutottam egy egész egyszerű felépítéshez, azonban a lekérdezéssel megakadtam. Lehet, hogy nem a lekérdezés miatt nem jutok tovább, elképzelhető, hogy nem jól közelítem meg a kérdést!
Ha egy termékeket tartalmazó táblát feloldottam két táblára, úgy, hogy az egyik tábla tartalmazza a termékeket, a másik pedig a termék árakat (mivel lehet egy terméknek több különböző ára), akkor az elképzelésem szerint én olyan lekérdezést készítenék, ami lekérdez minden terméket a termék táblából, majd minden egyes termékhez megszerzi az árakat. előfordul, hogy egy terméknek csak 1-2 ára van, azonban van olyan is, amelyiknek 5.
Arra gondoltam, hogy készítek egy nézetet a két táblából ezen feltételek figyelembe vételével, és majd ebből szolgálom ki az adatigényt.
És itt jön a gondom! Amíg a termék és az ár egy táblában volt, addig a lekérdezés eredményében a termék és az árak egy rekordként jelentek meg, azaz mid a termék, mind az összes ár egy sorban volt. Igen, volt olyan, amikor egy terméknél a lekérdezés eredménye sok-sok üres mezőt tartalmazott.
Mit tegyek? Olyan lekérdezést erőltessek, aminek az eredménye egy olyan nézet tábla, mint amilyen az eredeti táblám volt, azaz minden ár egy sorban szerepel a termékkel, vagy létezik lekérdezési eljárásé, amivel olyan lekérdezést tudok csinálni, ahol a termék egy rekord lesz, de az ár mező mégis tartalmazza az összes termékhez fellelhető árat. Lehet, hogy badarság, de mintha a rekordban az ár mező tömb lenne.
Kérlek titeket mutassatok utat! Nem megoldást várok, csak tapasztalt sql programozók véleményét.
GROUP_CONCAT
Összefoglalva
Az első teljesen egyértelmű. Ezzel a lekérdezéssel elkészíthetek egy olyan nézetet, amiben az ár mezőből lesz egy többértékű mező. A nézetből történő kigyűjtés után php-vel tömbösítem az ár mező értékét.
A második is érthető. Minden rekordot annyiszor viszek át a nézetbe, ahány ár tartozik hozzá, majd, ha kigyűjtök a nézetből, úgy tömbösítem php-vel, hogy folyamatosan kitétel a tömbben a termék azonosítója mint index.
A harmadik is egyértelmű, nagyjából ezt használtam hasonló esetekben.
Erőforrás:
Az első esetben a nézet tábla pontosan annyi rekorddal fog rendelkezni mint amennyi termék van a termékek táblában, azonban az ár mező többértékű mező lesz.
A második esetben annyi rekord lesz a nézet táblában egy termékhez, ahányszor árat talál hozzá az ár táblában. Ha klasszikusan minden termék két árral rendelkezik és azon felül a termékek 50% rendelkezik még 3 árral, akkor az 5000 termék esetén nagyjából 17500 rekord.
A harmadik megoldásban a lekérdezéssel nem készíthető nézet tábla (ha jól értelmezem), illetve készíthető csak struktúráját és tartalmát tekintve megegyezik a termékeket tartalmazó táblával.
Összegzés:
Azt hiszem, de javítsatok ki ha nem igaz, hogy a megoldásokat erőforrás felhasználás szempontjából három csoportra oszthatjuk:
1. MySQL és php is dolgozik
2. MySQL nagyon dolgozik és php is dolgoik
3. MySQL nagyon dolgozik és php is nagyon dolgozik
Azt hiszem, meg fogom mérni mindegyiket!
Köszönöm az ötleteket!