cautare in baza de date dupa 2 cuvinte sau mai multe

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

sad3
PHPRomania Supporter
Mesaje: 14
Membru din: Lun Mar 22, 2010 7:22 pm
Contact:

cautare in baza de date dupa 2 cuvinte sau mai multe

Mesajde sad3 » Joi Noi 25, 2010 2:48 pm

Salutare, am revenit cu inca o intrebare.
Cum spune si titlul vreau sa fac o cautare in baza de date "bdate" in coloana "titlu", dupa mai multe cuvinte introduse de un utilizator in form cu valoarea "cautare"

Din cate am inteles din ce am citit pe forumuri si pe "goagle" trebuie sa folosesc functia explode.
Problema e ca nu ii dau de capat cum sa o implementez in query .

Daca puteti sa imi dati un exemplu.

Eu am incercat ceva de genul:

Cod: Selectaţi tot


$cautare = @$_GET['cautare'] ;\\ sa spunem ca userul a introdus 111 dalmatieni
$cautare_impartit = explode(" ", $cautare);\\ imparte fraza 111 dalmatieni in doua cuvinte separate 111 si dalmatieni


si acum o idee va rog cum fac cautarea in baza de date.
M-am gandit asa , dar nu prea merge.

Cod: Selectaţi tot

sql = select * from bdate where titlu like \"%$cautare_impartit[0]%\" AND titlu like \"%$cautare_impartit[1]%\" AND .....etc


Ideea e ca eu vreau sa imi returneze orice fraza contine 111 dalmatieni...de forma : ex. Vand 111 caini printre care si 2 dalmatieni
sau 111 politisti au atacat 111 dalmatieni...ETC

Multumesc pentru rabdare si bafta.
Ultima oară modificat Vin Noi 26, 2010 1:46 pm de către sad3, modificat 1 dată în total.



last1devil
Average Member
Mesaje: 60
Membru din: Mar Sep 21, 2010 8:14 pm
Localitate: Spain
Contact:

Mesajde last1devil » Joi Noi 25, 2010 4:45 pm

In query in loc de AND incearca cu OR.
Sau vezi daca te ajta cu ceva asta http://w3schools.com/sql/sql_in.asp
Be creative!

alexandru_24
Senior Member
Mesaje: 261
Membru din: Mar Iul 11, 2006 11:27 am
Localitate: Bucuresti
Contact:

Mesajde alexandru_24 » Joi Noi 25, 2010 6:41 pm

bad post...
am un magazin online de baterii laptop www.baterii-laptop.com.ro si unul de gadgeturi, accesorii telefoane mobile, etc... www.abshop.ro

sad3
PHPRomania Supporter
Mesaje: 14
Membru din: Lun Mar 22, 2010 7:22 pm
Contact:

Mesajde sad3 » Joi Noi 25, 2010 11:58 pm

Am incercat cu or , dar nu face ce doresc eu...cu or cauta doar un singur cuvant din fraza respectiva.Si pt alexandru...cum adica
bad_post...
.

Avatar utilizator
Birkoff
Senior Member
Mesaje: 6380
Membru din: Joi Mar 18, 2004 2:34 pm
Localitate: Bucuresti
Contact:

Mesajde Birkoff » Vin Noi 26, 2010 12:44 am

eu nu am inteles cum anume vrei sa faci cautarea... daca vrei dupa fiecare cuvant in parte pai faci asa

Cod: Selectaţi tot

$cuvinte_primite = 'ala bala portocala';
$cuvinte = explode(' ',$cuvinte_primite);

$query = "SELECT * FROM tabel WHERE ";
foreach ($cuvinte as $cuvant)
   $query .= "title LIKE '%{$cuvant}%' OR ";
// scoatem ultimul or
$query = substr($query, 0, -3);
// rulam query
echo $query;
1) CMS, ERP, CRM, etc... (doar pentru clienti))
2) Portofoliu, servicii, contact, blog
3) Folositi aceasta clasa sql in proiectele voastre (open source)
4) Vrei un magazin virtual la cheie, usor de folosit, cu api-uri incluse pentru maximizarea vanzarilor si multe alte facilitati? Da un semn si discutam.

Avatar utilizator
alexx_utza
Senior Member
Mesaje: 251
Membru din: Joi Mai 10, 2007 10:56 am
Localitate: in padure...
Contact:

Mesajde alexx_utza » Vin Noi 26, 2010 9:11 am

Daca am inteles eu bine, el doreste sa returneze toate titlurile care au in continut si '111' dar si 'dalmatieni'. In cazul in care foloseste select-ul cu OR in loc de AND va returna si titluri de forma 'Am numarat 111 flori' sau 'Vand doi dalmatieni'.
Cred ca abordarea initiala cu AND era in regula, insa mie nu mi-a mers query-ul corect

Am facut un mic test si mi-a returnat ok pentru

Cod: Selectaţi tot

select * from test where titlu like '%111%' AND titlu like '%dalmatieni%'


In loc de like "%val%" foloseste like 'val'

sad3
PHPRomania Supporter
Mesaje: 14
Membru din: Lun Mar 22, 2010 7:22 pm
Contact:

Mesajde sad3 » Vin Noi 26, 2010 12:06 pm

Solutia data de Birkoff este aproape buna pentru ce imi trebuia mie
Am modificat un pic codul dat de el .
Mie imi trebuia cu "and" in loc de "or".
Acum codul arata asa

Cod: Selectaţi tot

$cuvinte_primite = 'ala bala portocala';
$cuvinte = explode(' ',$cuvinte_primite);

$query = "SELECT * FROM tabel WHERE ";
foreach ($cuvinte as $cuvant)
   $query .= "title LIKE '%{$cuvant}%' AND ";
// scoatem ultimul and
$query = substr($query, 0, -4);
// rulam query
echo $query;


Multumesc si bafta.


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 22 vizitatori