Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Seleccionar un solo registro en una busqueda

Estas en el tema de Seleccionar un solo registro en una busqueda en el foro de Bases de Datos General en Foros del Web. Hola, estoy montando un buscador avançado con diversos campos, y me he dado cuenta que cuando busco una pelicula y no pongo por ejemplo su ...
  #1 (permalink)  
Antiguo 01/07/2005, 06:33
 
Fecha de Ingreso: junio-2005
Mensajes: 30
Antigüedad: 18 años, 10 meses
Puntos: 0
Seleccionar un solo registro en una busqueda

Hola, estoy montando un buscador avançado con diversos campos, y me he dado cuenta que cuando busco una pelicula y no pongo por ejemplo su director en el campo director, si hay 2 directores para la misma pelicula me sale el campo repetido, que podria hacer?

GRacias
  #2 (permalink)  
Antiguo 01/07/2005, 10:41
 
Fecha de Ingreso: mayo-2005
Mensajes: 15
Antigüedad: 19 años
Puntos: 0
¿puedes mostrar la estructura de las tablas y la consulta?
  #3 (permalink)  
Antiguo 04/07/2005, 02:02
 
Fecha de Ingreso: junio-2005
Mensajes: 30
Antigüedad: 18 años, 10 meses
Puntos: 0
El codigo es:
El propblema me viene que en las tablas director, guionista, interprete me aparecen diveresos registos por cada registro que ingreso en Comun.Nombre ya que Por ejemplo la peliucula matrix tiene diversos directores e interpretes, pero a mi solo me intreresa que salga uno solo y me da igual cual ya que este codigo solo es para seleccionar con precision lo que se busca en una pagina de resultados y no quiero duplicados. y al buscar matrix sin decir director y interpretes entonces mes salen todos y obtengo duplicados. Si alguien me puede ayudar estare muy agradecido por que estoy con el agua al cuello y ya no se que mas probar.

p.d subrallo donde se encuentra la sentencia que da problemas

"SELECT Comun.id_comun, Comun.Nombre as programa, Comun.Fotografia, Comun.Valoracion, Comun.Tipo, Comun.Resumen, Comun.Comentario, Comun_Pelicula.id_comun, r_cine_genero.id_comun, r_cine_genero.id_genero_cine, r_cine_director.id_comun, r_cine_director.id_director, r_cine_interprete.id_interprete, r_cine_interprete.id_comun, r_cine_guionista.id_comun, r_cine_guionista.id_guionista,Guionista.Nombre,Gui onista.id_guionista FROM Comun, Comun_Pelicula, r_cine_genero, r_cine_director, r_cine_interprete,Interprete_Cine, r_cine_guionista, Guionista
WHERE (Comun.Nombre LIKE '%$busqueda%')&&(Comun.Resumen LIKE '%$resumen%')&&(Comun.Comentario LIKE '%$comentario%')&&(Comun.id_comun=Comun_Pelicula.i d_comun)&&(Comun_Pelicula.texto_cineforum LIKE '%$comentario_cineforum%')&&(Comun.id_comun=r_cine _genero.id_comun)&&(r_cine_genero.id_genero_cine LIKE '%$genero%') &&(Comun.id_comun=r_cine_director.id_comun)&&(r_ci ne_director.id_director LIKE '%$director%') &&(Comun.id_comun=r_cine_interprete.id_comun)&&(r_ cine_interprete.id_interprete=Interprete_Cine.id_i nterprete)&&( Interprete_Cine.Nombre LIKE '%$interprete%')&&
(Comun.id_comun=r_cine_guionista.id_comun)&&(r_cin e_guionista.id_guionista=Guionista.id_guionista)&& (Guionista.Nombre LIKE '%$guionista%')"

Última edición por danieldonet@hot; 04/07/2005 a las 02:18
  #4 (permalink)  
Antiguo 05/07/2005, 03:15
 
Fecha de Ingreso: junio-2005
Mensajes: 30
Antigüedad: 18 años, 10 meses
Puntos: 0
Me han comentado este sistema:

cuando el usuario pulse el botón para buscar compruebas qué campos están cubiertos y en función de ello creas una consulta u otra:

$consulta="SELECT * FROM tabla WHERE";

if ($_POST['campo1']!="") $consulta.=" campo1 LIKE '".$_POST['campo1']."%' and ";

if ($_POST['campo2']!="") $consulta.=" campo2 LIKE '".$_POST['campo2']."%' ";

[...]


Es una forma nueva de programar y no acabo de entender muy bien su fundamento. me podriais dar un ejemplo con algunos de mis datos reales y yo ya seguire con el resto?

por ejemplo:
Cogo informacion de un campo del formulario a traves de:
HTTP_GET_VARS['general']
HTTP_GET_VARS['director'] --->este me lo pueden enviar vacio o no

la sentencia de busqueda actual que tengo es:
$query_hoytv = "SELECT Comun.id_comun, Comun.Nombre, r_cine_director.id_comun, r_cine_director.id_director, Director.id_director, Director.Nombre
FROM Comun, r_cine_director, Director
WHERE (Comun.Nombre LIKE '%$busqueda%')&&(Comun.id_comun=r_cine_director.id _comun)&&(r_cine_director.id_director=Director.id_ director) && (Director.Nombre LIKE '%$director%')";
  #5 (permalink)  
Antiguo 05/07/2005, 03:24
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 9 meses
Puntos: 2
Tal como dices las cosas, es lo normal: cuando cruzas una tabla con otra en relación 1.N, sin especificar condiciones unívocas en la segunta tabla, pues te salen N registros.
Para lo que tú planteas tienes dos opciones: afinar la consulta de búsqueda y no cruzas con la segunda tabla (sería lo más lógico para optimizar) o limitas el resultado con "LIMIT 0,1".
Eso que pones tú como "una nueva forma de programar" no tiene nada de novedoso y es lo que yo te propongo como más idóneo. Eso sólo es condicionar la elaboración de la instrucción de consulta a los valores que recibes. Si no necesitas cruzar con una tabla ¿para qué hacerlo?, sólo consigues ralentizar la consulta y tener los problemas que tú mismo relatas.
Y la forma de hacerlo es tal cual la has puesto tú: si el campo x tiene valor, cruzas con la tabla que lo tiene, pones la condición de cruce de las tablas y estableces la restricción de búsqueda por ese valor.
Un saludo.
__________________
Estoy contagiado de Generación-I

Última edición por Vice; 05/07/2005 a las 04:02
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 19:06.