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:

Cod: Selectaţi tot

Regula: 1+1=3


daca in tabel scie

Cod: Selectaţi tot

Regula: 1+1=2


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.