ugrás a tartalomhoz

Katalógus: előszűrés

demo · 2011. Aug. 29. (H), 07.02
Sziasztok!

Ötleteket keresek a következő feladat optimális megvalósításához. Egy katalógus termékeinek listázása előtt a kereső feltételinek változtatásával kiírni a feltételeknek megfelelő találatok darabszámát.

Egyszerűen csak futtassam le kétszer az sql-t?
Vagy mentsek minden egyes keresési kombinációt eredményét és abból kérjem a találatok darabszámát? Új termék felvitelénél újra el kéne végezzem.

Az is probléma, hogy naponta változhatnak a termékek.

Kösz.
 
1

Solr

Poetro · 2011. Aug. 29. (H), 07.08
Használj olyan keresőmotort, aminek ez nem okoz problémát. Ilyen például a Solr.
2

MySQL-ben a SELECT-nek van

Hidvégi Gábor · 2011. Aug. 29. (H), 08.28
MySQL-ben a SELECT-nek van egy olyan módosítója, ami segít az összes találat megszámlálásában akkor, ha LIMIT-et használsz a végén:
SELECT SQL_CALC_FOUND_ROWS mezo1, mezo2 FROM ... LIMIT 20,30
Korábban hasonló problémával küzdöttünk, mint te, optimalizálnunk kellett a kódot, és az derült ki, hogy gyorsabb lefuttatni kétszer ugyanazt a lekérdezést (pontosabban az első SELECT COUNT(index_mezo) FROM legyen), mint ezt a SQL_CALC_FOUND_ROWS-osat egyszer.
3

Ha jól értem a kérdést, akkor

H.Z. v2 · 2011. Aug. 29. (H), 08.48
Ha jól értem a kérdést, akkor leginkább attól függ, milyen mennyiségű adatból kell válogatni és az eredmény mérete várhatóan mekkora.

Kissé eltúlozva: ha percekig fut a lekérdezésed és visszaad ötven sort, akkor elég egyértelmű, hogy temporális táblába v. memóriába mentem és onnan szolgáltatok információt.
Ha ugyanez visszaadja az eredeti tábla tartalmának 90%-át akkor úgyis mindegy, memóriába nem fér be, temporális táblába írni meg csak tovább lassít.
Szóval én arra szavaznék, hogy erősen függ a dolog az adatbázisod szerkezetétől és méretétől is.

De még1x, okulva a korábbiakon: _HA_ jól értem. :-)
4

Kösz a tippeket. Egyelőre a

demo · 2011. Aug. 30. (K), 06.03
Kösz a tippeket. Egyelőre a két lekérdezést próbáljuk ki.