Foros del Web » Creando para Internet » Diseño web »

Búsqueda de un texto en varios campos a la vez

Estas en el tema de Búsqueda de un texto en varios campos a la vez en el foro de Diseño web en Foros del Web. Buenas tardes, Estoy haciendo una base de datos de películas e intento optimizar y probar todas las búsquedas que se me ocurren, en general ya ...
  #1 (permalink)  
Antiguo 16/07/2008, 11:30
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Búsqueda de un texto en varios campos a la vez

Buenas tardes,

Estoy haciendo una base de datos de películas e intento optimizar y probar todas las búsquedas que se me ocurren, en general ya tengo casi todas controladas pero se me había ocurrido que podía poner una opción en un menú desplegable en la que me buscase el texto que escribo en 3 campos diferentes de la misma tabla.

Actualmente tengo 3 opciones en el menú desplegable: una para buscar por Intérpretes, otra por director y otra por título y funcionan todas perfectamente lo que quiero crear es una opción todos que me busque en los 3 campos a la vez, este sería el código como lo tengo ahora:

<form action="buscarmultiple.asp?tmultiple=tmultiple" method="get">
<input type="text" name="tmultiple" id="tmultiple" />
</br>

<select name="multiple" id="multiple">
<option value="1" selected="selected">Todos</option>
<option value="2">Interprete</option>
<option value="3" >Director</option>
<option value="3" >Titulo</option>
</select>
</label>
<label>
<input type="submit" name="button3" id="button3" value="Buscar" />
</label>
</form>

En busquedamultiple.asp iría esto:

<table>
<%
tmultiple=request.QueryString("tmultiple")
mmultiple= request("multiple")
%>
<%
if mmultiple = 1 then
sql = "Select * from PELICULAS where Interpretes OR Director OR Titulo like '%" & tmultiple & "%' ORDER by Titulo asc"
tabla.open sql,conexion
if tabla.eof then%>
No se han encontrado resultados
<% else while not tabla.eof
%>
<tr>
<td><b>Titulo:</b> <%=tabla.fields("Titulo")%></td>
<td><a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_self"><img src="caratulas/<%=tabla.fields("foto")%>" width="40%" height="40%" border="0" /></a></td>
<td><a href="eliminar.asp?id=<%=tabla.fields("id")%>" title="Eliminar" target="_blank"><img src="caratulas/eliminar.jpg" alt="Eliminar" onclick="return confirm('Quiere eliminar esta pelicula?')" /></a></td>

<% tabla.movenext
if not tabla.eof then
%>

<td><b>Titulo:</b> <%=tabla.fields("Titulo")%></td>
<td><a href="detalle.asp?id=<%=tabla.fields("id")%>" title="Detalle" target="_blank"><img src="caratulas/<%=tabla.fields("foto")%>" width="40%" height="40%" border="0" /></a></td>
<td><a href="eliminar.asp?id=<%=tabla.fields("id")%>" title="Eliminar" target="_blank"><img src="caratulas/eliminar.jpg" alt="Eliminar" onclick="return confirm('Quiere eliminar esta pelicula?')" /></a></td>


<% tabla.movenext
end if%>
</tr>
<%wend
end if%>

<% tabla.close
else if mmultiple = 2 then
sql = "Select * from PELICULAS where Interpretes like '%" & tmultiple & "%' ORDER by Titulo asc"
tabla.open sql,conexion
if tabla.eof then%>
...

Os agradecería mucho cualquier tipo de ayuda, supongo que con arreglar la consulta del SQL ya funcionará pero no se como hacerla.

Última edición por haga41; 16/07/2008 a las 11:31 Razón: fallo ortográfico
  #2 (permalink)  
Antiguo 17/07/2008, 09:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Búsqueda de un texto en varios campos a la vez

No se si hay una forma más mejor pero y las tres consultas unidas por un UNION DISTINCT

Select *
From
(Select * from PELICULAS where Director like '%" & tmultiple & "%'
UNION
Select * from PELICULAS where Interpretes like '%" & tmultiple & "%'
UNION
Select * from PELICULAS where Titulo like '%" & tmultiple & "%'
) as seleccion
ORDER by seleccion.Titulo asc

el order tienes que ponerlo fuera del union si no no actua


(no se si admite el * igual tienes que poner el nombre de los campos)


Quim

Última edición por quimfv; 23/07/2008 a las 04:45
  #3 (permalink)  
Antiguo 17/07/2008, 12:13
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Búsqueda de un texto en varios campos a la vez

Gracias por tu ayuda quimfv, lo he intentado poner como me has dicho pero a no ser que se me haya colado algo no funciona ni con * ni poniendo todos los campos separados por comas después de los select. Me da este error:

Error de compilación de Microsoft VBScript (0x800A0409)
Constante de cadena sin terminar

Este es el código que tengo ahora:

<%if mmultiple = 1 then
sql = "Select * From (Select * from PELICULAS where Director like '%" & tmultiple & "%'
UNION DISTINCT
Select * from PELICULAS where Interpretes like '%" & tmultiple & "%'
UNION DISTINCT
Select * from PELICULAS where Titulo like '%" & tmultiple & "%'
) as seleccion
ORDER by seleccion.Titulo asc"

tabla.open sql,conexion
if tabla.eof then%>

También lo he probado así:

<%if mmultiple = 1 then
sql = "Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento From (Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento from PELICULAS where Director like '%" & tmultiple & "%'
UNION DISTINCT
Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento from PELICULAS where Interpretes like '%" & tmultiple & "%'
UNION DISTINCT
Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento from PELICULAS where Titulo like '%" & tmultiple & "%'
) as seleccion
ORDER by seleccion.Titulo asc"
tabla.open sql,conexion
tabla.open sql,conexion
if tabla.eof then%>

¿Alguna idea de que es lo que puede fallar?
Gracais de antemano.
  #4 (permalink)  
Antiguo 18/07/2008, 01:58
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Búsqueda de un texto en varios campos a la vez

No conozco la reglas de sintaxis de VBScript.

El error que te da tiene que ver con el hecho de que la consulta esta escrita en varias lineas, por eso te dice que la constante cadena (sql) esta sin terminar...

En VBasic for aplications (el de Acces ) se haria así:

sql = "Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento " & _
"From (Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento " & _
"from PELICULAS where Director like '%" & tmultiple & "%' " & _
"UNION " & _
"Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento " & _
"from PELICULAS where Interpretes like '%" & tmultiple & "%' " & _
"UNION " & _
"Select Id,Titulo,Interpretes,Director,Anio,Min,Genero,Pai s,Foto,Argumento " & _
"from PELICULAS where Titulo like '%" & tmultiple & "%' " & _
") as seleccion " & _
"ORDER by seleccion.Titulo asc"

No se si se hace igual en VBScript, otra solución seria eliminar los saltos de linea pero luego es muy incomodo de trabajar...

Quim

Última edición por quimfv; 23/07/2008 a las 04:45
  #5 (permalink)  
Antiguo 18/07/2008, 03:16
Avatar de berthely  
Fecha de Ingreso: junio-2008
Ubicación: VHSA Mexico
Mensajes: 453
Antigüedad: 15 años, 10 meses
Puntos: 9
Respuesta: Búsqueda de un texto en varios campos a la vez

En teoria te puedo decir una solicion:

Agrega una opcion en el Select (cuadro combinado)
<option value="4" >Todas</option>

y tratala con el if del PHP
if (value==4) {
//aqui pon la consulta concatenado con ORs para todos los casos.
}

Espero ayudar en algo. Bye.
  #6 (permalink)  
Antiguo 23/07/2008, 04:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Búsqueda de un texto en varios campos a la vez

Craso error UNION no UNION DISTINCT

Quim
  #7 (permalink)  
Antiguo 14/08/2008, 13:09
 
Fecha de Ingreso: junio-2008
Mensajes: 145
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: Búsqueda de un texto en varios campos a la vez

Muchas gracias a todos por las respuestas.

quimfv, he quitado el distinct después del UNION y he separado las líneas como me explicas en tu penúltimo mensaje y funciona perfectamente. Ahora tengo otra duda que no tiene nada que ver con esta pero supongo que será mejor que la ponga en el foro de ASP.
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 01:50.