Foros del Web » Programando para Internet » PHP »

Mejorar o hacer funcionar esta consulta

Estas en el tema de Mejorar o hacer funcionar esta consulta en el foro de PHP en Foros del Web. Hola a todos Tengo esta consulta en mi base de datos mysql, se trata de una consulta que devuelve los registros tras haber insertado los ...
  #1 (permalink)  
Antiguo 08/12/2005, 15:00
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 16 años, 4 meses
Puntos: 0
Mejorar o hacer funcionar esta consulta

Hola a todos

Tengo esta consulta en mi base de datos mysql, se trata de una consulta que devuelve los registros tras haber insertado los criterios de busqueda en un formulario:

$cons_sql = "SELECT * FROM temas WHERE ((idisla='$_POST[isla]') AND (idcat='$_POST[categoria]') AND (titulo LIKE '%$_POST[criterio]%') OR (texto LIKE '%$_POST[criterio]%') AND (validado=1)) ORDER BY fechainsercion DESC";

El problema es el siguiente, $_POST[isla] y $_POST[categoria] pueden ser a veces 0 (cuando seleccionan todas las islas y todas las categorias).

La verdad es que no consigo que funcione... llevo horas con este tema...

Alguna ayudita

Gracias
  #2 (permalink)  
Antiguo 08/12/2005, 15:30
 
Fecha de Ingreso: mayo-2005
Mensajes: 423
Antigüedad: 12 años, 6 meses
Puntos: 1
has probado con ifs segun esos valores y si no estan vacions haces la sentencia completa y sino las sentencias parciales
__________________
Dios creo un equipo perfecto a los demas los lleno de extranjeros
  #3 (permalink)  
Antiguo 08/12/2005, 16:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Debes crear sentencias SQL de forma dinámica para cubrir los casos de esas dos variables PHP que puedan no tener valor . En esos casos tu sentencia SQL debe quedar sin el bloque SQL: idisla='$_POST[isla]' AND ó (idcat='$_POST[categoria]')

Es decir ..

Código PHP:
// Pre-definir variables vacias...
$categoria_sql='';
$isla_sql='';
$operador_sql='';

// Si tiene valor "categoria" .. añado el SQL correspondiente.
if (!empty($_POST['categoria'])){
    
$categoria_sql="idcat='".$_POST['categoria']."'";
}

// Si tiene valor "isla" .. añado el SQL correspondiente.
if((!empty($_POST['isla'])){
   
$isla_sql="idisla='".$_POST['isla']."'";
}

// Si "isla" y "categoria" tienen valor .. coloco el operador "AND" ...
if (!empty($_POST['isla']) && !empty($_POST['categoria'])){
$operador_sql="AND";
}


$cons_sql "SELECT * FROM temas WHERE $isla_sql $operador_sql $categoria_sql AND (titulo LIKE '%$_POST[criterio]%') OR (texto LIKE '%$_POST[criterio]%') AND (validado=1)) ORDER BY fechainsercion DESC"
Revisa haciendo echo $cons_sql en todas las combinaciones posibles si la sentencia SQL que se compone es la que esperas.

Un saludo,
  #4 (permalink)  
Antiguo 08/12/2005, 17:09
 
Fecha de Ingreso: agosto-2001
Ubicación: Gran Canaria (España)
Mensajes: 430
Antigüedad: 16 años, 4 meses
Puntos: 0
Muchas gracias Cluster, el codigo me ha venido de mil maravillas... tan solo una salvedad, cuando el post isla y categoria estan los dos vacios, daba un error ya que intercalaba el operador AND que esta justo antes de (titulo LIKE...

Lo he resuelto asi, ahora me va de mil maravillas:
Código PHP:
// Predefinimos las variables vacias
$categoria_sql=''
$isla_sql=''
$operador_sql1=''

// Si tiene valor "categoria" .. añado el SQL correspondiente. 
if ($_POST[categoria]!=0){ 
    
$categoria_sql="idcat='".$_POST['categoria']."'"
    
$operador_sql2="AND";     


// Si tiene valor "isla" .. añado el SQL correspondiente. 
if($_POST[isla]!=0){ 
   
$isla_sql="idisla='".$_POST['isla']."'"
   
$operador_sql2="AND";        


// Si "isla" y "categoria" tienen valor .. coloco el operador "AND" ... 
if (($_POST[isla]!=0) and ($_POST[categoria]!=0)){ 
$operador_sql1="AND"
$operador_sql2="AND"


//Preparación y ejecucion de la consulta y asignacion de las variables 
$_pagi_sql "SELECT * FROM temas WHERE $isla_sql $operador_sql1 $categoria_sql $operador_sql2 (titulo LIKE '%$_POST[criterio]%') OR (texto LIKE '%$_POST[criterio]%') AND (validado=1)) ORDER BY fechainsercion DESC"
Muchas gracias de nuevo... que seria de mi sin vosotros...
  #5 (permalink)  
Antiguo 08/12/2005, 17:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, .. no me fijé en es "AND" que quedaba colgando. Lo bueno es que entendistes la "técnica" y pudistes solventar el detalle.

Un saludo,
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:35.