ugrás a tartalomhoz

Szűrő készítése (hogy optimalizáljak?)

TIV · 2009. Szep. 17. (Cs), 15.16
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!
 
1

Kapcsoló tábla

tisch.david · 2009. Szep. 17. (Cs), 15.45
Szia!

Ú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
2

Az én hülye gondolatom

zila · 2009. Szep. 17. (Cs), 19.07
Első gondolatom, hogy miként lehetséges az, hogy a kategória ID-k változnak??? Ha törléstől változik az id akkor az már nem id, hanem egy vicc.

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?
3

köszönöm a válaszokat

TIV · 2009. Szep. 24. (Cs), 12.00
Sziasztok!

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!

miként lehetséges az, hogy a kategória ID-k változnak???

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 darabszámokkal mi legyen?

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! :)