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

Ya no se que hacer :'(

Estas en el tema de Ya no se que hacer :'( en el foro de Bases de Datos General en Foros del Web. Hola a todos, ya me rompi la cabeza tratando de solucionar esto pero no pude. La cuestion es asi, una libreta de contactos donde cargamos ...
  #1 (permalink)  
Antiguo 01/07/2004, 15:49
NHS
 
Fecha de Ingreso: junio-2002
Ubicación: Todos lados
Mensajes: 92
Antigüedad: 21 años, 10 meses
Puntos: 0
Ya no se que hacer :'(

Hola a todos, ya me rompi la cabeza tratando de solucionar esto pero no pude.
La cuestion es asi, una libreta de contactos donde cargamos los gerentes y secretarias, la tabla de contactos vendria a hacer asi.
3 campos, esenciales ( en realiad son mas ) id,nombre,secretaria

tabla_1
[id] [nombre] [secretaria]
1 Martin Lopez - N
2 Jorge Perez - N
3 Juan Gutierrez - N
4 Maria Suarez - S
5 Carolina Trevez - S

y tengo otra tabla que me relaciona las secretarias a los gerentes, 1 gerente puede tener varias secretarias o que una secretaria atienda a varios gerentes.

tabla_2
[id] - [gerente_id] - [secretaria_id]
1 - 1 - 4
2 - 2 - 4

Yo quiero hacer un combo con los gerentes asignados a la secretaria 4 y otro combo con los gerentes que no tiene asignados. Osea en el combo de los gerentes asignados me tendrian que aparecer 2 (id 1,2 ) y en el de los no asignados me aparece 1 (id 3)

Y la verdad que no se como hacer la consulta sql, ya probe usando el INNER JOIN, LEFT JOIN, RIGHT JOIN y otros mas, pero no pude dar con el resultado esperado.

Perdonen la extension del post, esto lo estoy haciendo con php, mysql 3.x.

Gracias.
  #2 (permalink)  
Antiguo 02/07/2004, 02:02
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola,
select tabla_1.nombre from tabla_1, tabla_2
where tabla_2.secretaria_id = 4 and tabla_2.gerente_id = tabla_1.id

OJO! suponiendo que un 4º gerente no tuviera id 4!

Cuentame que tal.
Davinia.
  #3 (permalink)  
Antiguo 02/07/2004, 07:30
NHS
 
Fecha de Ingreso: junio-2002
Ubicación: Todos lados
Mensajes: 92
Antigüedad: 21 años, 10 meses
Puntos: 0
Gracias, usando ese query solo me muestra los gerentes que tienen asignado la secretaria 4 pero no puedo ver cual es el gerente que no tiene asignado la secretaria 4.
  #4 (permalink)  
Antiguo 04/07/2004, 02:02
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 2 meses
Puntos: 0
Hola,
para el otro combo (gerentes que no tienen asignados la secretaria 4, seria algo asi):

Es decir, seleccionamos los gerentes que no se seleccionaron en la consulta que te puse en el otro mensaje

select tabla_1.nombre, tabla_1.id from tabla_1, tabla_2
where tabla_1.id not in (
select tabla_1.id from tabla_1, tabla_2
where tabla_2.secretaria_id = 4 and tabla_2.gerente_id = tabla_1.id
)

Ya me cuentas, ok?
  #5 (permalink)  
Antiguo 05/07/2004, 08:46
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Espero no meter la pata ni ensombrecer el impecable trabajo de Davinia, pero Mysql 3.x no soporta subselects

Sobre la extensión del Post, me parece que has descrito el problema perféctamente en un espacio corto (muchos tendrían que tomar nota )

La solución para el segundo combo pasaría por emplear código. Me lo pienso y en un minuto te pongo un pedazo...
__________________
Kelpie
  #6 (permalink)  
Antiguo 05/07/2004, 08:57
Avatar de Kelpie  
Fecha de Ingreso: febrero-2002
Ubicación: NorthSpain
Mensajes: 609
Antigüedad: 22 años, 2 meses
Puntos: 8
Una forma de hacerlo sería guardar en un hash los que están en la primera y luego poner en la segunda los que no están en el hash...:

Código PHP:
$sq1="select tabla_1.nombre from tabla_1, tabla_2 where tabla_2.secretaria_id = 4 and tabla_2.gerente_id = tabla_1.id";
$res1=mysql_query($sq1) or die("Falló la base");
while (
$fila1=mysql_fetch_array($res1)){
    
//Aquí vas poniendo los que tienen la secretaria
    //Código para añadir
    //Y aprovechas para guardarlos...
    
$tienen[$fila1['id']]=1;
}
//Te los traes todos
$sq2="SELECT id FROM tabla1 WHERE secretaria='S'";
$res2=mysql_query($sq2) or die("Falló la base");
while (
$fila2=mysql_fetch_row($res2)){
    
//A ver si está en la otra consulta
    
if (!isset($tienen[$fila2[0]] or $tienen[$fila2[0]]!=1){
        
//Este no estaba (no tiene la secre 4). Pues lo añades
        //Código para añadir
    
}

__________________
Kelpie
  #7 (permalink)  
Antiguo 06/07/2004, 02:42
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 2 meses
Puntos: 0
Vaya, pues no tenia ni idea de que mysql3.x no soportaba subselects... una cosa mas que sé.

Bueno, a ver si le funciona.

NHS, cuentanos si te ha funcionado, ok?
  #8 (permalink)  
Antiguo 07/07/2004, 07:14
NHS
 
Fecha de Ingreso: junio-2002
Ubicación: Todos lados
Mensajes: 92
Antigüedad: 21 años, 10 meses
Puntos: 0
lo hice usando el siguiente query

"SELECT contactos.*, relacion_gerentes.secretaria_id, relacion_gerentes.gerente_id FROM contactos LEFT JOIN relacion_gerentes ON relacion_gerentes.secretaria_id = '".$_POST['contacto_id']."' AND relacion_gerentes.gerente_id = contactos.id WHERE contactos.titulo = 'G' AND contactos.empresa = '".$_POST['empresa_id']."' AND contactos.ocultar = 'N' AND relacion_gerentes.secretaria_id IS NOT NULL;

donde contactos era la tabla_1 y relacion_gerentes la tabla_2
  #9 (permalink)  
Antiguo 08/07/2004, 00:57
 
Fecha de Ingreso: marzo-2004
Mensajes: 96
Antigüedad: 20 años, 2 meses
Puntos: 0
me alegro de que lo hayas sacado.

:)
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 12:24.