Keresés adatbázisban szövegrészletre
Hi all!
Lehet, hogy láma a kérdés, de azért légyszi segítsetek.
A lényeg az lenne, hogy valamilyen módon szövegrészletet tudjak keresni adott adatbázis adott táblájának adott mezőjében
van egy módszerem, amivel megoldható (konkrétan hogy először kimentem az összes rekordot egy változóba, madj a vátozó lemein végighaladok egy foreach-csel, a feltételnek megfelelő sorok elsődleges kulcsát elmentem egy tömbbe, majd ismét foreach-csel végighaladok az új tömbön, és az elsődleges kulcsot rakom a feltételbe. ezután a kimeneti változóban már csak a keresésnek megfelelő rekordok találhatók.))), de ez nem elegáns, és semmiképpen sem gyors megoldás.
a legjobb az lenne, ha egy select utasítással meg lehetne oldani, valahogy így:
SELECT 'mezőnév1','mezőnév2','mezőnév3',... FROM 'táblanév' WHERE 'feltétel', ahol a feltétel helyére kellene berakni egy parancsot, amivel karakterláncban keresek egy másik karakterláncot. ha esetleg függvényt is meg lehet hívni a feltételben, az is jó lenne.
apropó: megoldható-e az, hogy keresek a tábla1-ben, de a feltétel a tábla2-re vonatkozik? ha igen, hogyan?
a válaszokat előre is köszönöm
üdv: csery_vic
■ Lehet, hogy láma a kérdés, de azért légyszi segítsetek.
A lényeg az lenne, hogy valamilyen módon szövegrészletet tudjak keresni adott adatbázis adott táblájának adott mezőjében
van egy módszerem, amivel megoldható (konkrétan hogy először kimentem az összes rekordot egy változóba, madj a vátozó lemein végighaladok egy foreach-csel, a feltételnek megfelelő sorok elsődleges kulcsát elmentem egy tömbbe, majd ismét foreach-csel végighaladok az új tömbön, és az elsődleges kulcsot rakom a feltételbe. ezután a kimeneti változóban már csak a keresésnek megfelelő rekordok találhatók.))), de ez nem elegáns, és semmiképpen sem gyors megoldás.
a legjobb az lenne, ha egy select utasítással meg lehetne oldani, valahogy így:
SELECT 'mezőnév1','mezőnév2','mezőnév3',... FROM 'táblanév' WHERE 'feltétel', ahol a feltétel helyére kellene berakni egy parancsot, amivel karakterláncban keresek egy másik karakterláncot. ha esetleg függvényt is meg lehet hívni a feltételben, az is jó lenne.
apropó: megoldható-e az, hogy keresek a tábla1-ben, de a feltétel a tábla2-re vonatkozik? ha igen, hogyan?
a válaszokat előre is köszönöm
üdv: csery_vic
Ajánlás
Full-Text Search Functions
lehet hogy félreértelek de....
ha szótöredékre akarsz keresni (pl az 'something' szo szerepeljen a 'some' a 'thing' es a 'ometh' kereséskor is)
SELECT * FROM tablzat WHERE figyelt_oszlopok LIKE '%keresettstring%"
a szászalék itt bárhány bármilyen karit helyettesithet (lehet hogy 0-t)...
ifrozen (aki lehet hogy rosszat mondott)
like - ifrozen (aki lehet hogy jót mondott)
Ahogy Poetro említette, a full-text search az "ideális" megoldás. Kifejezetten szövegrészek keresésére lett kitalálva.
Bár megjegyzem, a MySQL-t évekkel ezelőtt teszteltem LIKE-al. Hihetetlen gyors akár még több millió sor esetében is.
Tehát kis mennyiségű (MySQL) adat esetében nyugodt szívvel ajánlom a LIKE-ot is. Kezdésnek talán egyszerűbb is.
nem mindegy hol van a %
Ha a keresendő szöveg elejére teszel % jelet, akkor ezzel kizárod az index használatot, míg ha nincs ott, akkor tudja használni, ezért ha van index, akkor nagyon gyors is lehet a keresés.
Felhő
% és index
Teljesen igazad van az index-el kapcsolatban. Kipróbáltam anno a %-ot a keresendő szöveg előtt is. Ugyan nem tizedmásodperces válaszidőket produkált, de emlékeim szerint 2-3 perc alatt végigment a tesztadatokon.
Kipróbáltam postgres-el is ugyanazon adatokkal -> kb. egy óra múlva sem volt eredmény, így leállítottam.
Persze ez évekkel ezelőtt volt, azóta nagyon sokat fejlődött a postgres is sebességben.