Foros del Web » Programando para Internet » PHP »

relacionar dos tablas php

Estas en el tema de relacionar dos tablas php en el foro de PHP en Foros del Web. Hola, Estoy empezando a cacharrear con PHP y mySQL y tengo una duda, a ver si pudierais echarme una mano ... Tengo dos tablas TABLA ...
  #1 (permalink)  
Antiguo 08/11/2011, 04:13
Avatar de dulcedeleon  
Fecha de Ingreso: septiembre-2011
Ubicación: Asturias
Mensajes: 5
Antigüedad: 12 años, 7 meses
Puntos: 0
Exclamación relacionar dos tablas php

Hola,

Estoy empezando a cacharrear con PHP y mySQL y tengo una duda, a ver si pudierais echarme una mano ...

Tengo dos tablas

TABLA 1: campana, cuya estuctura es:

CREATE TABLE IF NOT EXISTS `campana` (
`id_campana` int(11) NOT NULL,
`nombre_campana` varchar(50) collate utf8_spanish_ci NOT NULL,
`descripcion_campana` varchar(100) collate utf8_spanish_ci default NULL,
`logo_campana` varchar(45) collate utf8_spanish_ci default NULL,
`fecha_inicio` datetime NOT NULL,
`fecha_fin` datetime NOT NULL,
PRIMARY KEY (`id_campana`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

TABLA 2: usuarios, cuya estructura es:

CREATE TABLE IF NOT EXISTS `usuarios` (
`id` int(11) NOT NULL auto_increment,
`usuario` varchar(20) collate utf8_spanish_ci NOT NULL,
`password` varchar(20) collate utf8_spanish_ci NOT NULL,
`email` varchar(45) collate utf8_spanish_ci NOT NULL,
`extension` int(20) default NULL,
`categoria` varchar(35) collate utf8_spanish_ci NOT NULL,
`fecha` datetime NOT NULL,
`nombre` varchar(45) collate utf8_spanish_ci NOT NULL,
`apellidos` varchar(45) collate utf8_spanish_ci NOT NULL,
`foto` varchar(200) collate utf8_spanish_ci default NULL,
`tipouser` int(1) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=11 ;

y quiero relacioanrlas de manera que un usuario pueda tener asignadas ninguna, una o varias campañas

he creado la tabla usuarios_has_campana, cuya estructura es

CREATE TABLE IF NOT EXISTS `usuarios_has_campana` (
`usuarios_id` int(11) NOT NULL,
`campana_id_campana` int(11) NOT NULL,
PRIMARY KEY (`usuarios_id`,`campana_id_campana`),
KEY `fk_usuarios_has_campana_campana1` (`campana_id_campana`),
KEY `fk_usuarios_has_campana_usuarios` (`usuarios_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;

Bien, aquí ya me he quedado parada y no sé seguir, no sé si he hecho bien la relación ... no sé cómo mostrar esa relación en el front, de amnera qeu cuando un usuario entre en su perfil pueda ver su campaña asociada.

y cómo puedo asociar un usuario y una campaña desde un formulario en el front???

No sé si son demasiadas preguntas o es abusar ... pero toda ayuda sería de agradecer.

Muchisimas gracias de antemano.

Un saludo,
  #2 (permalink)  
Antiguo 08/11/2011, 05:02
 
Fecha de Ingreso: septiembre-2008
Ubicación: Manises,Valencia
Mensajes: 114
Antigüedad: 15 años, 7 meses
Puntos: 13
Respuesta: relacionar dos tablas php

Hola,

hay mucha maneras de hacer una cosa, yo te explico cómo lo haría:

en la tabla usuario añade un campo que sea `id_campana` int(11) NOT NULL,

en ese campo cada usuario tendrá el numero de campaña al que está asociado,
el resto creo que no hace falta que te lo explique, verdad?

La tabla 'usuarios_has_campana' creo que te sobra.

Si un usuario va vinculado a más de una campaña o viceversa puedes usar otras formulas. Si es el caso y no sabes cómo hacerlo dímelo.

un saludo!
  #3 (permalink)  
Antiguo 08/11/2011, 05:44
Avatar de SetheR  
Fecha de Ingreso: enero-2009
Mensajes: 265
Antigüedad: 15 años, 3 meses
Puntos: 44
Respuesta: relacionar dos tablas php

Cita:
Iniciado por dulcedeleon Ver Mensaje
H
y quiero relacioanrlas de manera que un usuario pueda tener asignadas ninguna, una o varias campañas
Con lo cual @fontanares, es su caso.

Yo personalmente, también uso otra tabla adicional para indicar relaciones de uno a varios o varios a varios.

Cita:
Iniciado por dulcedeleon Ver Mensaje
Bien, aquí ya me he quedado parada y no sé seguir, no sé si he hecho bien la relación ... no sé cómo mostrar esa relación en el front, de amnera qeu cuando un usuario entre en su perfil pueda ver su campaña asociada.
Para recoger los datos, se supone que ya posees la id de usuario al entrar en su perfil, con lo cual, haces una consulta SQL que te devuelva los ID de campaña asociados a ese id de usuario, y a partir de esos IDs de campaña (si lo necesitas mostrar también), recoges los datos de las campañas.

Para simplificar las consultas, es recomendable usar una consulta combinada, utilizando JOINs o productos cartesianos.

Saludos
  #4 (permalink)  
Antiguo 08/11/2011, 06:25
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 9 meses
Puntos: 21
Respuesta: relacionar dos tablas php

Una opción es crear un campo en la tabla 'usuario_has_campana' llamada 'cantidad_campanas', donde almacenarás la cantidad de campañas asociadas a un usuario. Esta tabla "usuario_has_campana" es una entidad débil creada de una relación entre las tablas "usuario" y "campana".

De lo contrario, tienes que relacionar las tablas a través de los identificadores de las tablas usando JOINS o selects anidados.

Este tema es de conceptualización de bases de datos, no de PHP.
  #5 (permalink)  
Antiguo 08/11/2011, 08:00
 
Fecha de Ingreso: septiembre-2008
Ubicación: Manises,Valencia
Mensajes: 114
Antigüedad: 15 años, 7 meses
Puntos: 13
Respuesta: relacionar dos tablas php

Gracias SetheR, lo leí por encima y se me escapó esa linea.

Etiquetas: relacion, tablas
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:48.