Pagina 1 din 1
Cautare in tabel expresie asemanatoare
Scris: Lun Mai 21, 2012 6:37 pm
de Double_Web
Am gasit o problema noua:
utilizatorul introduce intr-o zona de text, un text. Cum fac sa caut in tabel acel text; daca nu gaseste sa-mi caute ceva asemanator.
De exemplu:
utilizatorul introduce urm. txt:
daca in tabel scie
da eroare ca nu gaseste acel text.
Cum fac sa-mi caute in tabel (daca nu gaseste inregistrarea ca atare), ceva semanator cu ce scrie userul?[/quote]
unde?
Scris: Lun Mai 21, 2012 7:09 pm
de frederikb
Intr-un tabel dintr-o baza de date?
Scris: Lun Mai 21, 2012 8:03 pm
de Double_Web
da.
o baza de date are untabel.
tabelul are 3 coloane:
-id;
-col1;
-col2.
In col1 exista un text "Regula: 1+1=2".
Userul scrie intr-un camp: "Regula: 1+1=3"
O sa-mi apare eroare ca nu gaseste acel text, dar eu vreau sa caute un text asemanator cu ce introduce userul.
Scris: Mar Mai 22, 2012 1:16 pm
de frederikb
pai
SELECT * FROM tabel WHERE col1 LIKE %expresie%
nu ?
Scris: Mar Mai 22, 2012 9:22 pm
de Double_Web
am incercat si asa dar nu merge...
alte idei ?
cod
Scris: Mie Mai 23, 2012 12:07 am
de frederikb
posteaza bucata de cod.
trebuie sa meaga
Scris: Mie Mai 23, 2012 2:24 am
de dechim
Incearca dupa cum "suna":
SELECT * FROM tabela WHERE SOUNDEX($expresie) = SOUNDEX(col1);
sau
SELECT * FROM tabela WHERE $expresie SOUNDS LIKE col1;
Ar trebui sa mearga
test
Scris: Mie Mai 23, 2012 4:01 am
de frederikb
deci, din ce imi dau seama abia acum
mysql va incerca sa testeze sa vada conditia
deci, egalul ala nu are ce cauta acolo
atat timp cat e 1+1=3 pus in queryul tau
n-o sa mearga, ptr ca 1+1 nu e egal cu 3.
ma indoies si in cazul lui 1+1=2 , dar nu intelg de ce
vrei sa faci WHERE col LIKE 1+1=3 , n-are sens.
deci ori faci LIKE, NOT LIKE sau = direct pe o expresie.
La ce anume lucrezi?
Scris: Mie Mai 23, 2012 7:37 pm
de Double_Web
am incercat sa fac metoda cu 'sunatoarea' dar nu prea merge...
uite un rebut:
Cod: Selectaţi tot
$sql1="SELECT * FROM aa_bb WHERE caearinata = SOUNDS LIKE '$ceariantaa'";
am incercat si sintaxa dechim, dar nici aia nu mere..
Scris: Mie Mai 23, 2012 8:31 pm
de dechim
Mai am o idee. Sterge cate un caracter de la sfarsitul expresiei de cautat
$expresie = "1+1=3";
$result = mysql_query("SELECT * FROM tabela WHERE '$expresie' LIKE '%col1%';");
while (strlen($expresie)>1 && mysql_num_rows($result)==0)
{
$expresie = substr($expresie, 0, -1);
$result = mysql_query("SELECT * FROM tabela WHERE '$expresie' LIKE '%col1%';") or die(mysql_error());
}
...
Poti incerca si alte variante, sa elimini caractere de la inceput sau din interiorul sirului dupa o regula pe care ti-o stabilesti tu
Scris: Joi Mai 24, 2012 12:54 am
de l33t
dechim scrie:Mai am o idee. Sterge cate un caracter de la sfarsitul expresiei de cautat
...
Poti incerca si alte variante, sa elimini caractere de la inceput sau din interiorul sirului dupa o regula pe care ti-o stabilesti tu
Implementezi in mysql functia levenshtein, ai exemplu si functia mai jos:
http://stackoverflow.com/questions/4671 ... -mysql-php
Scris: Joi Mai 24, 2012 9:01 am
de socu
Pentru astfel de cautari ai nevoie de un search server. Solutii barbare cum ar fi inlaturarea rand pe rand a caracterelor din text sau chiar functia levenshtein or sa-ti incetineasca foarte mult cautarea, sa nu mai vorbim cand o sa ai multe inregistrari. Renunta la ideea de a face cautari complexe in mysql (sau alte sgbd-uri).
Scris: Joi Mai 24, 2012 11:30 am
de Double_Web
@dechim mersi, acum cauta ceva mai bine in db.
@socu, m-am gandit sa nu fac cautari complexe dar... daca scriptu are nevoie, ce sa fac....?
Scris: Dum Iun 24, 2012 11:06 pm
de AJalex
SELECT * FROM tabelul_tau WHERE coloana_ta LIKE %text%
Asta ar trebui sa mearga, LIKE trebuie combinat cu inlocuitori cum este si %.
Scris: Lun Iun 25, 2012 11:14 am
de mihaitha
See FULLTEXT search
http://devzone.zend.com/26/using-mysql- ... searching/
Dezavantajul e ca nu merge pe tabele InnoDB, doar pe MyISAM, deci ai de ales intre fulltext search si foreign keys.