Foros del Web » Programando para Internet » PHP »

Consulta a base de datos

Estas en el tema de Consulta a base de datos en el foro de PHP en Foros del Web. Hola a todos, tengo una duda y es que en una aplicación que estoy haciendo, tengo varios checkbox. Dependiendo de los que estén pulsados se ...
  #1 (permalink)  
Antiguo 04/07/2008, 12:17
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Consulta a base de datos

Hola a todos,

tengo una duda y es que en una aplicación que estoy haciendo, tengo varios checkbox. Dependiendo de los que estén pulsados se va a buscar una cosa u otra en la base de datos. Pongo un ejemplo para que se entienda mejor:

x título
descripción Qué desea buscar: musica
x categoría

La consulta me tendría que devolver, todos los campos de la tabla donde en el título y la descripción apareciera la palabra 'musica'. El problema es que puede haber uno, dos o tres campos pulsados y no se como hacerlo para que me devuelva lo que quiero.

Espero que alguien pueda ayudarme.

Muchas gracias
  #2 (permalink)  
Antiguo 04/07/2008, 12:39
Avatar de alapaco  
Fecha de Ingreso: septiembre-2003
Ubicación: Caballito - Buenos Aires - Argentina - América del Sur - Planeta Tierra - Sistema Solar - Vía Láctea
Mensajes: 216
Antigüedad: 20 años, 7 meses
Puntos: 5
Respuesta: Consulta a base de datos

Podría ser algo así:
Código PHP:
$where "1=1";
if (isset(
$_REQUEST["titulo"]))
  
$where.= " AND UPPER(Titulo) like UPPER('%".$_REQUEST["titulo"]."%')";
if (isset(
$_REQUEST["categoria"]))
  
$where.= " AND UPPER(Categoria) like UPPER('%".$_REQUEST["categoria"]."%')";
$sql "SELECT * FROM tabla WHERE".$where
Despues ejecuta el query y mostras lo que sea necesario.
__________________
__________________
Álvaro Lapacó
  #3 (permalink)  
Antiguo 04/07/2008, 12:41
 
Fecha de Ingreso: febrero-2003
Ubicación: Santiago
Mensajes: 220
Antigüedad: 21 años, 2 meses
Puntos: 4
Respuesta: Consulta a base de datos

Pones los checkbox

Código PHP:
<input type="checkbox" name="titulo" value="1" /> Buscar en titulo<br />
<
input type="checkbox" name="categoria" value="1" /> Buscar en categoria<br />
<
input type="checkbox" name="descripcion" value="1" /> Buscar en descripcion 
y al procesar el codigo, supongamos que es un select con like simple, y la palabra de busqueda viene en $_POST["keywords"]
Código PHP:
$consulta "SELECT * FROM tabla WHERE ";
if (
$_POST["titulo"]==1) { $consulta .= "titulo LIKE '%".$_POST["keywords"]."%' AND "; }
if (
$_POST["categoria"]==1) { $consulta .= "categoria LIKE '%".$_POST["keywords"]."%' AND "; }
if (
$_POST["descripcion"]==1) { $consulta .= "descripcion LIKE '%".$_POST["keywords"]."%' AND "; }

// Fijate que siempre terminara $consulta con "AND ", pues para que no de error ahora quitas los ultimos cuatro caracteres.

$consulta substr($consulta,0,strlen($consulta)-4);

// Y nuestra consulta quedara bien formada xD, ahora a ejecutarla y ya tienes el recursos a explorar (ya ves tu si lo haces con mysql_fetch_array o que), si quieres agregar algo como un limit o un order by, solo haz $consulta .= " LIMIT X ORDER BY X";

$sql=mysql_query($consulta); 
Espero se halla entendido un poco, saludos xD
__________________
Roberto Osses Elgueta
Senior Web Developer
  #4 (permalink)  
Antiguo 04/07/2008, 12:42
 
Fecha de Ingreso: febrero-2003
Ubicación: Santiago
Mensajes: 220
Antigüedad: 21 años, 2 meses
Puntos: 4
Respuesta: Consulta a base de datos

valla que alapaco me ha ganado xD,

"no ahi problema que te quede WHERE AND ?? "
__________________
Roberto Osses Elgueta
Senior Web Developer
  #5 (permalink)  
Antiguo 04/07/2008, 12:44
Avatar de alapaco  
Fecha de Ingreso: septiembre-2003
Ubicación: Caballito - Buenos Aires - Argentina - América del Sur - Planeta Tierra - Sistema Solar - Vía Láctea
Mensajes: 216
Antigüedad: 20 años, 7 meses
Puntos: 5
Respuesta: Consulta a base de datos

Cita:
Iniciado por RoKo Ver Mensaje
valla que alapaco me ha ganado xD,

"no ahi problema que te quede WHERE AND ?? "
No, no, fijate que arriba inicialicé la variable $where.
__________________
__________________
Álvaro Lapacó
  #6 (permalink)  
Antiguo 04/07/2008, 12:46
 
Fecha de Ingreso: febrero-2003
Ubicación: Santiago
Mensajes: 220
Antigüedad: 21 años, 2 meses
Puntos: 4
Respuesta: Consulta a base de datos

Buen truco alapaco, no lo habia analizado, excelente respuesta, saludos ;)
__________________
Roberto Osses Elgueta
Senior Web Developer
  #7 (permalink)  
Antiguo 04/07/2008, 12:53
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta a base de datos

Pues voy a probarlo y os digo, pero si que es muy buena idea lo de quitar los últimos 4 caracteres. Me estaba volviendo loca!!!.
Muchas muchas gracias
  #8 (permalink)  
Antiguo 04/07/2008, 17:43
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Consulta a base de datos

Hola de nuevo,

creo que al final voy a tener que usar el código de Roko porque necesito que las palabras que se busquen estén en uno o más de los campos de la tabla. La consulta (sin tener en cuenta los checkbox para este ejemplo) sería algo así:

$ssql="SELECT * FROM general WHERE UPPER(title) like UPPER('%".$abuscar."%') OR UPPER(keyword) like UPPER('%".$abuscar."%') OR UPPER(description) like UPPER('%".$abuscar."%')";

Usando OR.

El problema es que si tengo:

1 Título:'La cometa' keyword: 'casa libro'
2 Título:'come más fruta' Keyword:'fruta pais

Si busco la palabra 'come' en estos registros, me va a devolver los dos porque encuentra come en 'cometa'. ¿Sabeis como puedo hacer que busque la palabra completa?

¿y que busque en distinto orden? Por ejemplo buscar 'libro casa' y me devuelva el primer registro.

Muchas gracias
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 02:22.