ugrás a tartalomhoz

Keresés adatbázisban szövegrészletre

csery_vic · 2006. Jún. 21. (Sze), 17.46
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
 
1

Ajánlás

Poetro · 2006. Jún. 21. (Sze), 17.56
MySQL esetén lásd:
Full-Text Search Functions
2

lehet hogy félreértelek de....

ifrozen · 2006. Jún. 21. (Sze), 21.26
... mivel én is kezdő vagoyk a témában nyugodt szivvel mondok nagyo hülyeséget:


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

like - ifrozen (aki lehet hogy jót mondott)

dajkap · 2006. Jún. 22. (Cs), 09.18
A LIKE '%' megoldás jól működik, viszont nagy mennyiségű adat esetén nem feltétlenül szerencsés, hiszen az összes letárolt string-en végigmegy. (akkor is, ha pl.10KB string-et kell végigjárnia minden egyes sor esetében)

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.
4

nem mindegy hol van a %

Hodicska Gergely · 2006. Jún. 22. (Cs), 11.15
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.

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ő
5

% és index

dajkap · 2006. Jún. 24. (Szo), 18.29
:)

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.