ugrás a tartalomhoz

Autocomplete input ajax-php-mysql

Castor87 · 2009. Ápr. 2. (Cs), 00.55
Hello!

Autocomplete input mezőt szeretnék létrehozni, talán nem szokványos módon. A legtöbb tutorial egyszerű, szó eleji egyezést használ. Viszont én hosszú karakterláncokban is szeretnék keresni. A működési elvvel tisztában vagyok, az sql lekérdezéshez kérnék segítséget.

Alap esetben a LIKE '$kulcs%' megoldás eredményre vezet egy text mezőnél. De olyan mezőben, ahol nem egy szó, hanem több mondat van, nem egy jó megoldás.

Kérdésem: milyen lekérdezéssel lehet a mondatokban lévő szavak elejének egyezését vizsgálni? Ha ez könnyen meg is oldható, érdekelne teljesítmény szempontból is, mert fogalmam sincs mennyire erőforrás pazarló; érdemes ilyenbe gondolkodni?

Innodb táblákról van szó, tranzakció kezeléssel és minden utf8ba van.
 
1

Szótár

Poetro · 2009. Ápr. 2. (Cs), 11.37
Ha ilyen keresést szeretnél, akkor érdemes lenne egy szótárat építeni az előforduló szavakból, és ezeket hozzárendelni a tartalmakhoz, azaz minden szó kapna egy azonosítót, és lenne egy előfordulás tábla, ahol jelölve van, hogy a szó melyik dokumentumban fordul elő, és hányszor, ezáltal lehet akár súlyozni is a találatokat.
2

Ejjha

Castor87 · 2009. Ápr. 2. (Cs), 22.23
Ilyenre nem is gondoltam. És mennyire szép dolog, hogy egy portál összes szava egy táblában van rekordonként? Teljesítmény szempontjából is jó megoldás? A súlyozás miatt, mindenképpen tetszik!

szerk.: azt hozzátenném, hogy többnyelvű a honlap, tehát csak azonosítókat tárolok. Ezért minden lekérdezés igazából 2 lekérdezés, mert a nyelvi táblából ki kell venni magát a szöveget. Kicsit erőforrás pazarlónak tűnik nekem első meglátásra. Van valakinek ezzel kapcsolatban tapasztalata?
3

Nem a szavak vannak rekordonként, ha jól értem.

s_volenszki · 2009. Ápr. 3. (P), 07.43
Nem az összes rekordban fellelhető szavakat kellene egy szótár táblába beírni, hanem készíteni egy szótár táblát, amiben a szó maga unique.

Ezek után csinálsz egy kapcsoló táblát (azt hiszem így hívják), ami összeköti az adott rekordot a benne található szavakkal.

Ha lesz 500 szöveges rekordod és abban az "alma" szó szerepel majd 1950-szer, attól az "alma" még csak egyszer lesz a szótár táblában!

Mikor keresnek a szöveges tartalmakban, lekérdezed az adott nyelv szótár táblájából a keresett kifejezést, hozzákötöd (JOIN) a kapcsoló táblát és már meg is kaptad az összes olyan szöveges bejegyzés azonosítóját, amiben megtalálható a keresett kifejezés.

Egyébként hozzá fűzhetet a lekérdezéshez egyből a szöveges tartalmak táblát is, így egy lekérdezésben megszereztél minden szükséges adatot!

Aztán még mindig lehet trükközni a keresési módokkal, úgy mint:

A keresési kifejezés egyezik:
- egész szóval (alma)
- szó elején (alma%)
- szó végén (%alma)
- bárhol (%alma%)

Szerintem...
4

Értem.

Castor87 · 2009. Ápr. 4. (Szo), 20.23
Kicsit félreérthető volt, ahogy fogalmaztam, de így most nekem is világosabb a helyzet. Nagyon tetszik, hogy a google-nél több szavas kifejezések is vannak. Ez gondolom ugyanazzal a módszerrel oldható meg, azaz a szótárba a "szavak" oszlopba kifejezéseket is beszúrok. Tehát az "alma" szóra listázódna az "alma" és az "alma szüret" is.

A szótárt milyen elv alapján lehetne feltölteni? Írásjelek és töltelékszavak jó lenne, ha nem kerülnének be.

Tartalom törlésnél törölni kell az adott kapcsolatot. Ha a kapcsolatok száma pontosan 1, akkor a szót/kifejezést is törölni kell. Ha jól értem.
5

egy hosszabb írás

gex · 2009. Ápr. 6. (H), 10.45
itt van egy egész jó írás ami érdekelhet, szerintem a blogmarkok között is volt de most nem találom.
6

köszönöm:)

Castor87 · 2009. Ápr. 6. (H), 16.01
köszönöm:)