Foros del Web » Programando para Internet » PHP »

Relacionar tablas según condición

Estas en el tema de Relacionar tablas según condición en el foro de PHP en Foros del Web. Hola a tod@s. Tengo que relacionar una tabla con otras según un valor de la primera. Es decir, en una tabla tengo un campos que ...
  #1 (permalink)  
Antiguo 26/06/2006, 05:42
Avatar de manuweb  
Fecha de Ingreso: julio-2002
Mensajes: 75
Antigüedad: 21 años, 9 meses
Puntos: 10
Relacionar tablas según condición

Hola a tod@s.

Tengo que relacionar una tabla con otras según un valor de la primera. Es decir, en una tabla tengo un campos que contien un valor como X-999 o Y-999 y necesito mostrar los nombres de los clientes X o Y de otras tablas según ese campo.

No sé si me he explicado bien, es algo así:

Tabla 1
-------
id - codigo
1 - 'X-1'
2 - 'X-2'
3 - 'y-1'
4 - 'x-3'

Tabla 2 (los x)
-----------
id - nombre
1 - pepito
2 - juanito
3 - joselito

Tabla 3 (los y)
-------------
id - nombre
1 - menganito
2- zutanito

La consulta debe darme los nombres, tanto de X como de Y.

¿se puede hacer un SELECT en función del valor de la tabla 1?

Muchisimas gracias.

manuweb
  #2 (permalink)  
Antiguo 26/06/2006, 08:31
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 5 meses
Puntos: 34
Vos necesitas una consulta que te de, por ejemplo?:
1 - 'X-1'->pepito
2 - 'X-2'->juanito
3 - 'y-1'->menganito
4 - 'x-3'->joselito

Si es así, por que tenes esta estructura? por que no es lo óptimo...si podes cambiarla hacelo. Sino la solución va depende de la versión de mysql que tengas...Aunque yo haría como simple dos consultas, la primera trayendo un select * from tbl1, iterar sobre esta, generar un array con un split del campo codigo, y hacer un select * from $arra[0] where id = $arra[1].
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 26/06/2006, 08:59
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
Explicate mejor, no entiedo porque tienes dos tablas con nombre de usuarios, y en todo caso te faltaria en una de las tablas un campo para asociarlo con las otras u otra tabla en donde especifiques esa asociocion entre tablas, es decir claves foraneas.
  #4 (permalink)  
Antiguo 27/06/2006, 01:25
Avatar de manuweb  
Fecha de Ingreso: julio-2002
Mensajes: 75
Antigüedad: 21 años, 9 meses
Puntos: 10
Cita:
Iniciado por nicolaspar
1 - 'X-1'->pepito
2 - 'X-2'->juanito
3 - 'y-1'->menganito
4 - 'x-3'->joselito
Exacto, pero no puedo cambiar tabla 1 pero no me importa hacer dos consultas pero he de relacionar la tabla 1 con la tabla x y despues la tabla 1 con la tabla y.

¿no se puede hacer "SELECT campo1 AS codigo FROM tabla1, tablax WHERE mascotas.quitax(capo1)=tablax.nombre"
donde quitax sea una funcion que devuelva solo el codigo sin la ?

gracias.
  #5 (permalink)  
Antiguo 27/06/2006, 04:48
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
y porque no crea una columna donde este la x o la y y otra columna con el numero.
De todas fomas creo que el diseño de la BBDD lo tienes un poco liado. Si nos dices que es lo que contiene cada tabla y que es lo que quiers hacer te decimos si el dieseño es correcto o no
  #6 (permalink)  
Antiguo 27/06/2006, 05:08
Avatar de manuweb  
Fecha de Ingreso: julio-2002
Mensajes: 75
Antigüedad: 21 años, 9 meses
Puntos: 10
la tabla es esta:

CREATE TABLE `historiales` (
`id` int(11) NOT NULL auto_increment,
`paciente` varchar(20) default NULL,
`historial` longtext,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=5 ;

el campo paciente lo construyo con el nº de médico y el tipo de paciente:
n_medico\tipopaciente-paciente : XX\T-XXX,

hay un historial para cada paciente y medico, el tipo de paciente es socio/no socio y el socio puede ser titular o beneficiario.

UN CAOS

hay otras tablas (nosocios, socios y beneficiarios) donde he de mirar los nombres a los que un determinado médico puede consultar.

Lo que he pensado es crear un array con los nombres de socios, beneficiarios y no socios de un determinado medico siguiendo estos pasos:

1º busco los historiales de un determinado medico: SELECT * FROM historiales WHERE paciente LIKE '%$medico\%';

2º Recorro esos datos y en una matriz voy añadiendo nombres según sean socios, beneficiarios o no socios;

3º Muestro esa matriz ordenada

Solo queria simplificar con un solo SELECT pero lo veo complicado ya que la estructura historiales es dificil de relacionar.

Gracias nuevamente.
  #7 (permalink)  
Antiguo 27/06/2006, 08:33
 
Fecha de Ingreso: junio-2005
Ubicación: Madrid, España
Mensajes: 288
Antigüedad: 18 años, 9 meses
Puntos: 1
Lo primero que haria seria separar en 2 campos el campo paciente, serian n-medio y codigo_paciente.

En vez de tener 3 tablas con no_socios socio o beneficiarios tendria solo una
,en esa tabla cada paciente tendra un codigo único(para relacionarlo con historiales), tambien en esa tabla le indicas el tipo de paciente que es puedes tener tantas columnas como tipo haya y marcarlas a 0 o 1 segun proceda.
De esta forma solo tienes dos tablas y para saber el nombre del paciente basta con hacer el JOIN de historiales y pacientes por el campo del codigo del paciente.

Espero te sirva de ayuda
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:23.