Foros del Web » Programando para Internet » PHP »

Diferenciar origen de los datos obtenidos con INNER JOIN

Estas en el tema de Diferenciar origen de los datos obtenidos con INNER JOIN en el foro de PHP en Foros del Web. Buenas, me gustaría saber si existe alguna manera de hacer una consulta con inner join de manera que la segunda base de datos dependa de ...
  #1 (permalink)  
Antiguo 20/01/2012, 07:25
danihxh
Invitado
 
Mensajes: n/a
Puntos:
Diferenciar origen de los datos obtenidos con INNER JOIN

Buenas, me gustaría saber si existe alguna manera de hacer una consulta con inner join de manera que la segunda base de datos dependa de un parámetro de la primera. Además, cómo puedo diferenciar a la hora de procesar el resultado el origen los datos de manera que, por ejemplo, se escriban de un color o de otro según de dónde provengan.

Tengo una base de datos vendedores_autonomos (id, nombre, fecha_inicio) y otra vendedores_fijos (id, nombre, fecha_inicio, sueldo, departamento, ...) y quiero que al cargar los productos de una tercera base de datos stock_productos (id, id_vendedor, precio, unidades, nombre, descripcion) aparezcan de otro color los que son de vendedores autónomos. Cada producto sólo puede pertenecer a un vendedor.

El otro problema es que no puedo hacer un inner join con vendedor.id=stock_productos.id_vendedor porque hay dos bases de datos con vendedores y tampoco creo que sea una buena opción hacer una sola base de datos de vendedores porque en la de autónomos quedarían muchos campos en blanco. Lo único que se me ocurre es tener un campo tipo_vendedor en la base de datos de los productos para poder saber de qué base de datos de vendedores hay que cargar el resto de la información, pero no sé cómo hacer esa comprobación en una sola consulta.

No duden en sugerir otra estructura para la base de datos si es mejor opción que la actual.

Muchas gracias!

Última edición por danihxh; 20/01/2012 a las 07:41 Razón: Añadir una segunda duda
  #2 (permalink)  
Antiguo 20/01/2012, 16:31
Avatar de Mikimoto74  
Fecha de Ingreso: enero-2005
Mensajes: 88
Antigüedad: 19 años, 10 meses
Puntos: 2
Respuesta: Diferenciar origen de los datos obtenidos con INNER JOIN

Creo que deberías replantearte usar una tabla (no base de datos) en vez de dos. No hay problema porque queden campos nulos. Más que nada en el caso en el que la mayoría de las consultas se refieran a ambas tablas. Al usar solo una, se reduciría la carga del servidor mysql.

De todas formas es posible trabajar con ambas tablas y diferenciar sus datos creando un campo personalizado:

SELECT s.*, a.nombre, 'autonomo' AS tipo_vendedor
FROM stock_productos s
INNER JOIN vendedores_autonomos a
ON a.id_vendedor = a.id
UNION
SELECT s.*, f.nombre, 'fijo' AS tipo_vendedor
FROM stock_productos s
INNER JOIN vendedores_fijos f
ON s.id_vendedor = f.id

Nota: En la unión los campos han de coincidir. Si quieres añadir los que tiene de más la tabla vendedores_fijos, en el select de vendedores_autónomos tendrás que añadir algo como: NULL AS sueldo, o '' AS sueldo

Última edición por Mikimoto74; 20/01/2012 a las 16:38
  #3 (permalink)  
Antiguo 23/01/2012, 04:24
danihxh
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Diferenciar origen de los datos obtenidos con INNER JOIN

Sí perdona, quise decir tabla, no base de datos.

De momento tengo algo así:

SELECT *
FROM productos
INNER JOIN vend_pro
ON vend_pro.id = productos.id_vendedor
WHERE productos.tipo_vendedor=1

UNION

SELECT *
FROM productos
INNER JOIN vend_privados
ON vend_privados.id = productos.id_vendedor
WHERE productos.tipo_vendedor=2

pero sigo pensando que debe de haber una manera mejor de hacerlo, porque un producto sólo puede pertenecer a un vendedor, ya sea fijo o autónomo y, por tanto, cuando se hace el segundo SELECT no sería necesario mirar en toda la tabla productos otra vez, sino sólo en las filas que no se hayan seleccionado ya en la primera consulta.

Etiquetas: diferenciar, join, origen
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 10:54.