ugrás a tartalomhoz

hasonló stringek keresése

monghuz · 2006. Okt. 16. (H), 11.17
Hali!

A téma kicsit php-mysql kombó szóval bocsi ha rossz helyre postoltam.

Egy mysqlben tárolom az adataimat, egy
id - csoport(group) - alapitas ideje(cr_date) táblában.

A probléma pedig felvitelnél hogy nagyon sok csoportot kell felvinni, viszont elgépelések, miatt valahogy ellenöriznem kell hogy elgépelés történt vagy esetleg van egy ugyan olyan nevü csoport (jah megegyező nevek megengedettek sajnos)

Úgy képzeltem el, hogy felvitelnél egy *.csv filebol beolvasom az adatokat és soronként megnézem hogy azzal a névvel szerepel-e már csoport az adatbázisban.
Ha nem akkor kap egy szép zöld hátteret, ha pedig van már olyan nevü csoport, akkor kap egy piros hátteret a táblázatom és egy legördülő menüből ki tudom választani hogy most melyik csoportról is van szó.
Sajnos nagyon sokszor ilyen kis nagybetü eltérések vannak.. (Gumimaci, GumiMaci, gumiMaci)

Egyrészt erre keresek egy olyan sql lekérdezést ami a hasonló szringeket dobja ki, mondjuk 3 karakter eltérésöeket, ill ha véletlen belegépeltek a szóba egy spacet vagy egy dupla betüt akkor nem hiszi azt a függvény hogy a hibától kezdve az összes string rossz.. (Gumimaci, Gummimaci - ez már 6 karakter eltérés lenne)


huh eremélem emészthető a dolog.. segítségeteket előre is köszönöm

bye monghuz
 
1

levenshtein távolság

zsepi · 2006. Okt. 16. (H), 11.33
phpban meg van valósítva a levenshtein távolság algoritmus (u.e. a fv. neve), vagy php-ban használod, s akkor a csoportneveket meg hossz alapján olvasod ki adatbázisból, vagy tárolt eljárásként/UDF-ként implementálod mysql-ben. A pszeudokód mindenütt fent van a neten, vagy nézz meg egy algo könyvet
2

Egy hasonló eset

viktorwrz · 2008. Jan. 26. (Szo), 06.55
Sziasztok!

Egy hasonló probléma elött állok, mint a fent említett. Előre bocsájtanám, h nem vagyok programozó, de a SELECT FROM-ig már eljutottam:D.

Azt szeretném megoldani, hogy egy regisztrációs űrlap kitöltésénél ajaxal lekérdezzem beíráskor, hogy a kívánt felhasználónév nem-e létezik már az adatbázisban. Ezt persze túl egyszerű lenne (sőt idáig már működik is), szóval mondom a bonyolítást.
A felhasználók ékezetes betűkkel is regisztrálhatnak, de kikéne szűrnöm, hogy az ékezetes usernevek ékezetmentesített változatával ne lehessen újra regisztrálni. Pl. ha már "robi" regisztrálva van akkor "rőbí" névvel ne lehessen regelni.
Ehhez kérném a segítségeteket. Létezik-e megoldás arra, hogy sqllekérdezésnél az sqlszerver a kritériumhoz HASONLÓ találatot adjon?

A dolog azért lenne fontos, mert a usereknek szeretnék virtuális subdomaineket adni az adatlapjukhoz és nem szeretném megszivatni magam az ékezetprobléma miatt.

Remélem érthetően írtam le mit is akarok.
3

Regex

Joó Ádám · 2008. Jan. 26. (Szo), 07.11
MySQL-ben használhatsz reguláris kifejezéseket. Rendelj minden ékezetes betűhöz egy ékezetnélkülit, és ezekből csinálj egy regexet, ami egyszerre keres az ékezetesre és az ékezetnélkülire.
5

Ez lenne a jó megoldás

viktorwrz · 2008. Jan. 26. (Szo), 16.14
Nos, köszönöm a válaszokat, nagyon hálás is vagyok érte. Viszont sajnos nem tudom, pontosan hogyan lehetne ezt megoldani. Kicsit szájbarágósabban, ha leírná valaki azt megköszönném. Sajnos - mint említettem - nem vagyok programozó...egy pályát tévesztett villanyszerelő volnék:P
7

Nosza

Joó Ádám · 2008. Jan. 26. (Szo), 17.41
Semmi gond, segítünk tanulni ;)
Amikor kapsz egy felhasználónevet, akkor abból generálsz egy regexet, ahol az ékezetes betűk mellé alternációval beteszed az összes abba a csoportba tartozó betűt, pl.: józsika => ^j(o|ó|ö|ő)zs(i|í)k(a|á)$
Figyelj rá, hogy a táblád típusa meghatározza, hogy a kisbetűt-nagybetűt hogyan veszi figyelembe, ha megkülönbözteti, akkor a nagybetűket is tedd bele, illetve figyelj arra is, milyen más karakterek jöhetnek még szóba (mondjuk umlautos a).

A MySQL regexekről itt van bővebben szó: http://dev.mysql.com/doc/refman/5.0/en/regexp.html
8

Kezd derengeni...:)

viktorwrz · 2008. Jan. 26. (Szo), 19.20
Nos belerágtam magam a dologba és nagyon tetszik ez a REGEXP , ugyanis eddig még sehol nem találkoztam vele, de rettentő hasznos dolognak tartom:D
Szóval, a feladat egyszerű (:D), a következőkódot kellene legenerálnom valahogy php-val:

SELECT COUNT( * ) AS result FROM users WHERE username = 'józsika' REGEXP '^j(o|ó|ö|ő)zs(i|í)k(a|á)$'

Ez a kód ugye egy 1-essel vagy egy 0-val tér vissza. Ennek megfelelően íratom ki, hogy az adott usernév regisztrálható-e vagy sem.
9

Működik :D

viktorwrz · 2008. Jan. 27. (V), 04.14
Köszönöm a segítséget. A dolog már működik is, élesben. Nem hittem volna, hogy ilyen egyszerű lesz a megoldás.
4

Másképp

csla · 2008. Jan. 26. (Szo), 10.08
Vagy ha megvan az algoritumosod (ha meg nincs, akkor készítesz egyet: ő->o,ö->o, stb.), amivel az ékezetes nevekből ékezet nélküli aldomain nevet generálsz, akkor ezt mindjárt megtehetnéd regisztrációkor, és el is menthetnéd a felhasználó mellé. És amikor új felhasználó regisztrál, akkor legenerálod az ékezet nélküli azonosítót a megadott névből, és arra keresel rá, hogy létezik-e már.
6

Nem biztos, hogy ez a jó megoldás

viktorwrz · 2008. Jan. 26. (Szo), 16.16
Ez a megoldás nem biztos, hogy jó, mivel ezt egy létező - kb. 1800 useradatot tartalmazó - adatbázisra kellene alkalmaznom.
Az "aldomainek" meg .htaccesből lesznek virtuálisan megoldva, tehát nem valós domainek lesznek.
10

Semmi sem biztos :)

csla · 2008. Jan. 27. (V), 10.34
Nyilván létező nevekből is le lehet ezt generálni, az pedig mindegy, hogy virtuális-e vagy sem, szempontunkból egy érték a felhasználó rekordjában.