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? ...
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
pot folosi
--- 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 !!!