Cautare mysql multiple LIKE

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
baciucalin
Mesaje:9

Cautare mysql multiple LIKE

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:

MarPlo Mesaje:4343
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%'

baciucalin Mesaje:9
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)

MarPlo Mesaje:4343
Da, $cuvinte=$_POST['q'], sau $_REQUEST['q']; nu conteaza cum si de unde preiei cuvintele.
Iar cel mai simplu de gasit raspunsul, este ... Incearca.

baciucalin Mesaje:9
marplo esti adevarat! inca odata multumesc din suflet!
e exact ce vroiam eu. mersi !!!