Szűrő készítése (hogy optimalizáljak?)
Sziasztok!
Van egy jó kis feladatom, de mielőtt nekiesnék próbálkozni, gondoltam beírok, mert úgyis akad egy két segítő cimbora, aki jártas ezen a téren. Szóval szűrő. A példa kedvéért motorokkal és alkatrészekkel fogom magyarázni a dolgot.
van három táblám, motorok, alkatreszek, alkatreszkategoriak
motorok: ahány sor annyi motor, gyártóval, modellel, cm3vel
alkatreszek: ahány sor annyi alkatrész, alkatrésznévvel és hogy melyik fő és alkategóriába tartozik (mármint azok id-je)
alkatreszkategoriak: a kategórianevek
Az alkatreszek és alkatreszkategoriak táblát nem kellene piszkálnom, mert régóta működik így, más is csatlakozik hozzá stb. A kategóriák id-je sajnos változik amikor újat adnak hozzá vagy törölnek. Ami fix, az az alkatrészek id-je! Bármi történjék, egy alkatrész id-je sosem változik, ha törlik, akkor nem kerül a helyére semmi.
Namost... a felhasználó kiválaszthatná a motor márkát, modelt, cm3-t, ezekkel szűkíthetne. de nem lenne kötelező minden kiválasztani-a, tehát elég lenne a márkát, és az oldalon már is csak azok a termékeke szerepelnének, amik az adott motorhoz jók. a gond az, ha csak pl. a márkát választja ki. Az APRILIA motorból vagy 160 féle van. Hogyan kapcsolnátok össze a motorokat és az alkatrészeiket?
ELSŐ HÜLYE GONDOLATOM
Gondoltam arra, hogy minden motorhoz megadom az alkatrész id-ket... belenyomom az egyik mezőbe tömbként (serialize), kiolvasom php-val őket, egybegyúrom és kiszűröm h 1 alkatrész csak többször forduljon elő. (1 alkatrész több motorhoz is tartozhat) Mondjuk így lenne 400 alkatrész. Ezután neki kellene ezzel ugranom az alkatreszek táblának, hogy megszerezzem a kategória ID-ket, hogy aztán elmehessek az alkatreszkategoria táblába a nevekért, amikből aztán a lapon a menüket csinálom. Jajjaj!
MÁSODIK HÜLYE GONDOLATOM
Mi lenne csinálnék egy közbülső táblát, amiben motorid-k és alkatrészid-k lennének párokban. ez sajnos elég sok sor (motorszám*~200 = több tízezer), viszont elkerülhetném, hogy php-hez kelljen nyúlnom... szóval lekérném a 160 motort, aztán az ezekez tartozó alkatrészlistát a közbülső tábláról DISTINCT módszerre, majd mehet tovább az alkatrészekért, kategórianevekért..ha jól gondolom itt egy lekérdezés lenne és nem lenne php-nak beleszólása.
HARMADIK HÜLYE GONDOLATOM
Aztán arra gondoltam lehetne ezt cacheszerűen csinálni. pl csinálnék egy táblát, amibe elmenteném, hogy ha az aprilia márkára szűrtek, akkor ezek a termékeket kellettek. na ez jól hangzik, de csak másodjára kivitelezhető, a legelső látogatónak milyen módszerrel szűrjem a dolgokat? valamennyi sql parancsot indexelni fogom.
Ti, hogy csinálnátok?
Nagyon köszönöm!
■ Van egy jó kis feladatom, de mielőtt nekiesnék próbálkozni, gondoltam beírok, mert úgyis akad egy két segítő cimbora, aki jártas ezen a téren. Szóval szűrő. A példa kedvéért motorokkal és alkatrészekkel fogom magyarázni a dolgot.
van három táblám, motorok, alkatreszek, alkatreszkategoriak
motorok: ahány sor annyi motor, gyártóval, modellel, cm3vel
alkatreszek: ahány sor annyi alkatrész, alkatrésznévvel és hogy melyik fő és alkategóriába tartozik (mármint azok id-je)
alkatreszkategoriak: a kategórianevek
Az alkatreszek és alkatreszkategoriak táblát nem kellene piszkálnom, mert régóta működik így, más is csatlakozik hozzá stb. A kategóriák id-je sajnos változik amikor újat adnak hozzá vagy törölnek. Ami fix, az az alkatrészek id-je! Bármi történjék, egy alkatrész id-je sosem változik, ha törlik, akkor nem kerül a helyére semmi.
Namost... a felhasználó kiválaszthatná a motor márkát, modelt, cm3-t, ezekkel szűkíthetne. de nem lenne kötelező minden kiválasztani-a, tehát elég lenne a márkát, és az oldalon már is csak azok a termékeke szerepelnének, amik az adott motorhoz jók. a gond az, ha csak pl. a márkát választja ki. Az APRILIA motorból vagy 160 féle van. Hogyan kapcsolnátok össze a motorokat és az alkatrészeiket?
ELSŐ HÜLYE GONDOLATOM
Gondoltam arra, hogy minden motorhoz megadom az alkatrész id-ket... belenyomom az egyik mezőbe tömbként (serialize), kiolvasom php-val őket, egybegyúrom és kiszűröm h 1 alkatrész csak többször forduljon elő. (1 alkatrész több motorhoz is tartozhat) Mondjuk így lenne 400 alkatrész. Ezután neki kellene ezzel ugranom az alkatreszek táblának, hogy megszerezzem a kategória ID-ket, hogy aztán elmehessek az alkatreszkategoria táblába a nevekért, amikből aztán a lapon a menüket csinálom. Jajjaj!
MÁSODIK HÜLYE GONDOLATOM
Mi lenne csinálnék egy közbülső táblát, amiben motorid-k és alkatrészid-k lennének párokban. ez sajnos elég sok sor (motorszám*~200 = több tízezer), viszont elkerülhetném, hogy php-hez kelljen nyúlnom... szóval lekérném a 160 motort, aztán az ezekez tartozó alkatrészlistát a közbülső tábláról DISTINCT módszerre, majd mehet tovább az alkatrészekért, kategórianevekért..ha jól gondolom itt egy lekérdezés lenne és nem lenne php-nak beleszólása.
HARMADIK HÜLYE GONDOLATOM
Aztán arra gondoltam lehetne ezt cacheszerűen csinálni. pl csinálnék egy táblát, amibe elmenteném, hogy ha az aprilia márkára szűrtek, akkor ezek a termékeket kellettek. na ez jól hangzik, de csak másodjára kivitelezhető, a legelső látogatónak milyen módszerrel szűrjem a dolgokat? valamennyi sql parancsot indexelni fogom.
Ti, hogy csinálnátok?
Nagyon köszönöm!
Kapcsoló tábla
Úgy gondolom, hogy ha valami elvégeztethető az adatbázis motorral, akkor azt vele kell elvégeztetni, mert sokkal gyorsabb, mint a PHP. MySQL-t ugyan még nem stesszteszteltem, de úgy gondolom, hogy a sok adat 100.000 - 1.000.000 rekordnál kezdődik, a 10.000 nem tétel egy SQL motornak.
Hogy mennyire majrés feltölteni a kapcsolótáblát, az persze már kérdés; de ezt az összerendelést sehogy sem úszod meg.
Üdv:
Dávid
Az én hülye gondolatom
Második gondolatom, ugyanaz mint @tisch.david-nak, vagyis kapcsolótábla (persze a sok rekord nem 100.000-nél kezdődik, de nem is 1.000.000-nál ;)
A szerializálást felejtsd el, ha relációs adatbázissal dolgozol (vagy ne dolgozz relációs adatbázissal, hanem egy jó kis objektum db-val, ott minden, mondjuk így, szerializált :)
No, tehát kell egy tábla ami megmondja, hogy melyik motor melyik alkatérszekből áll:
motor_alkatreszek: motor_id, alkatresz_id
Itt még kérdés, hogy a darabszámokkal mi legyen? pl. 8-as csavarból kell 120 db egy motorhoz, akkor az ebben a faék táblában 120 rekord, ami nem szép, ezért még bele lehet tenni a darabszámot is a táblába, szerintem jó lesz az. Persze nem tudom mi a valódi feladat, miket kell tudni még a szűrésen kívül?
köszönöm a válaszokat
Köszönöm a válaszokat, én is kapcsolótáblában láttam a megoldást és így is valósítom meg, de jól jött a megerősítés!
Ne nézz rám, nem én találtam ki (nem én csináltam), de túl nagy a rendszer ahhoz, hogy jótékonyságból átírjam.:)
A szűrésen kívül mást nem kell tudnia, így a darabszám sem fontos. de azért poén lenne kiírni, hogy két kerék kell, meg egy bukósisak.:)))
Köszönöm a válaszokat!
Dolgozom az ügyön! :)