Buenas a todos, como dice el asunto, estoy teniendo problemas al intentar filtrar valores de mi database. Me baje un search engine (motor de búsqueda) y estoy intentando agregarle modificaciones pero me cuesta horrores. Paso a comentar, lo que quiero hacer yo es que antes de realizar una búsqueda los usuarios puedan filtrar que buscar. Por ejemplo, si solo quieren buscar videos, cuando se seleccione la opción del formulario de "vídeos" al darle click al buscar solo busque en mi base de datos las filas de mi columna 'url' que empiezen con "
http://youtube.com".
Paso a dejar mi código a ver si alguien me puede ayudar.
Este es el formulario: <form class="searchForm" action="search.php" method="GET">
<input type="text" autocomplete="off" name="q" id="query"/>
<div>
<button>
<svg class='shape-search' viewBox="0 0 100 100" class='shape-search'><use xlink:href='#shape-search'></use></svg>
</button>
</div>
<input type="checkbox" name="filtroBusqueda" />
<label for="filtro">Filtrar Busqueda</label><br/>
<label for="youtube">youtube</label>
<input type="radio" name="link" value="youtube"/><br/>
<label for="taringa">taringa</label>
<input type="radio" name="link" value="taringa"/>
</form>
Y así tengo las funciones:function getResults(){
$q=$GLOBALS['q'];
$p=$GLOBALS['p'];
$start=($p-1)*10;
if($q!=null){
$starttime = microtime(true);
$sql=$GLOBALS['dbh']->prepare("SELECT `title`, `url`, `description` FROM search WHERE `title` LIKE :q OR `url` LIKE :q OR `description` LIKE :q ORDER By id");
$sql->bindValue(":q", "%$q%");;
$sql->execute();
$endtime = microtime(true);
if($sql->rowCount()==0 || $start>$sql->rowCount()){
return 0;
}else{
$duration = $endtime - $starttime;
$res=array();
$res['count']=$sql->rowCount();
$res['time']=round($duration, 4);
$limitedResults=$GLOBALS['dbh']->prepare("SELECT `title`, `url`, `description` FROM search WHERE `title` LIKE :q OR `url` LIKE :q OR `description` LIKE :q ORDER BY id LIMIT :start,:limit");
$limitedResults->bindValue(":q", "%$q%");
$limitedResults->bindValue(":start", $start, PDO::PARAM_INT);
$limitedResults->bindValue(":limit", 10, PDO::PARAM_INT);
$limitedResults->execute();
while($r=$limitedResults->fetch()){
$res["results"][]=array($r['title'], $r['url'], $r['description']);
}
return $res;
}
}
}
function filtrarBusqueda(){
$sql = "SELECT 'url' FROM search";
if(isset($_GET["filtroBusqueda"])){
$link = $_GET["link"];
switch($link){
case "youtube": $sql = $sql."WHERE 'url' LIKE 'https://youtube.com%' or 'url' LIKE 'http://youtube.com%'"; break;
case "taringa": $sql = $sql."WHERE 'url' LIKE 'https://taringa.net%' or 'url' LIKE 'http://taringa.net%'"; break;
}
}
else
{
$sql = "SELECT 'url' FROM search";
}
$resultado = $mysqli->query($sql);
}
Espero que alguien me pueda ayudar. Lo que estoy pensando es que tendría que hacer lo que hago en la función filtrarBusqueda dentro de la función getResults, pero no se.
Aclaración: Lo que estoy intentando agregar yo al search engine que me baje es la función filtrarBusqueda. La función getResults ya venía y funciona bien. Y el problema que tengo únicamente es que no me devuelve los resultados filtrados, pero si me devuelve todos los resultados que yo busque normal.
Muchas Gracias!