Pagina 1 din 1

Cautare mysql multiple LIKE

Scris: Vin Dec 03, 2010
de baciucalin
De ceva vreme m-am apucat sa fac un site pentru muzica si totul a decurs bine pana cand am vazut ca functiile pe care le folosesc nu imi retuneaza rezultatele dorite din baza de date. Momentan folosesc doar scriptul acesta:

Cod: Selectaţi tot

Cod: Selectaţi tot
if($get['q'] == '') { 
     $sql = "select * from muzica $cond"; 
     } 
     else { 
     $sql = "SELECT * FROM `muzica' WHERE `nume` LIKE '%$_REQUEST[q]%' OR album LIKE '%$_REQUEST[q]%'";
     }
in care $cond este definita dupa mai multe criterii (genul de muzica, numele melodiei, album, etc.)

Intrebarea mea este daca se poate implementa cumva in scriptul pe care il am un cod prin care sa caute in baza de date toate inregistrarile care contin cuvintele introduse in search. ( de ex caut "marplo jocuri" si sa imi returneze toate inregistrarile care contin cel putin unul din cuvintele cautate)
Se poate asa ceva?

Am gasit ceva cu permutari, filtrare dupa fiecare cuvant, dar nimic. Tot site-ul e ok functional dar partea asta e cam praf cand vine vorba de 2 sau mai multe cuvinte la cautare. Am citit si din ce am inteles ar fi ceva cu functia explode, ar ajuta la ceva? ... :roll:

Cautare mysql multiple LIKE

Scris: Sâm Dec 04, 2010
de MarPlo
Se poate aplica exemplu de mai jos, daca-l intelegi

Cod: Selectaţi tot

// Functie pt. adaugare cuvant intre % si ghilimele simple
function adGh($cuv) { return "'%".$cuv."%'"; }

$cuvinte = 'marplo cursuri jocuri';

$ar_cuv = explode(' ', $cuvinte);    // Separa cuvintele intr-un Array
$ar_cuv = array_map("adGh", $ar_cuv);

$ar_cols = array('`col1`', '`col2`');     // Array cu numele coloanelor
// Creaza pt cuvinte comenzi pt. SQL (LIKE), pt. fiecare coloana din $ar_cols
$ar_cauta = array();
for($i=0; $i<count($ar_cols); $i++) {
  $ar_cauta[] = $ar_cols[$i]. ' LIKE '. implode(' OR '. $ar_cols[$i]. ' LIKE ', $ar_cuv);
}

$cauta = implode(' OR ', $ar_cauta);     // Formeaza sirul de cautare

$sql = "SELECT * FROM `tabel` WHERE ". $cauta;

echo $sql;     // Verifica $sql

// SELECT * FROM `tabel` WHERE `col1` LIKE '%marplo%' OR `col1` LIKE '%cursuri%' OR `col1` LIKE '%jocuri%' OR `col2` LIKE '%marplo%' OR `col2` LIKE '%cursuri%' OR `col2` LIKE '%jocuri%'

Cautare mysql multiple LIKE

Scris: Sâm Dec 04, 2010
de baciucalin
am inteles si mi se pare ok pentru ce am nevoie, dar mai am o mica intrebare unde sunt bota.

in linia

Cod: Selectaţi tot

$cuvinte = 'marplo cursuri jocuri';
pot folosi

Cod: Selectaţi tot

 $cuvinte = '$get['q']'; 
--- pentru ca sa extraga cuvintele din casuta de cautare? (q este numele casutei)

Cautare mysql multiple LIKE

Scris: Sâm Dec 04, 2010
de MarPlo
Da, $cuvinte=$_POST['q'], sau $_REQUEST['q']; nu conteaza cum si de unde preiei cuvintele.
Iar cel mai simplu de gasit raspunsul, este ... Incearca.

Cautare mysql multiple LIKE

Scris: Sâm Dec 04, 2010
de baciucalin
marplo esti adevarat! inca odata multumesc din suflet!
e exact ce vroiam eu. mersi !!!