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

Relación de tabla

Estas en el tema de Relación de tabla en el foro de Mysql en Foros del Web. Hola foristas buenos tardes ultimamente ando un poco enrredado con las cosas y no doy con casi nada sera la mucha carga de trabajo imagino ...
  #1 (permalink)  
Antiguo 22/06/2009, 13:24
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Relación de tabla

Hola
foristas buenos tardes
ultimamente ando un poco enrredado con las cosas y no doy con casi nada sera la mucha carga de trabajo imagino yo.

bien voy a mi pequeño problema
tengo dos tablas
haglo la relación mediante fecha a
did
mid
tid

ahora bien en la tabla 1 listo la información segun fecha que tomo y quiero que me muestre la información adjutna de la tabla ve
la relación me trabaja bien
el problema es que no lo logro agrupar la información de la segunda tabla para que me salga en la primera.
que usar hay GROUP BY pero de que forma
para que en un solo listado de la primara tabala me salga todo lo referente a fecha de la segunda tabla.
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #2 (permalink)  
Antiguo 22/06/2009, 13:32
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Relación de tabla

¿Por qué no posteas la estructura de las tablas involucradas (la sentencia CREATE que las construye), y la sentencia que estás usando.
Sino, todo resulta muy abstracto, porque ni siquiera describes la segunda tabla...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 22/06/2009, 14:08
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

aqui la estructura

SELECT tt_tabla1.did, tt_tabla1.mid, tt_tabla1.yid,

tt_tabla1.subtitle, tt_tabla1.content,

tt_tabla2.title, tt_tabla2.descrip,

tt_tabla2.title_href, tt_tabla2.href,

tt_tabla2.usr_type, tt_tabla2.date,

tt_tabla2.img_promotion, tt_tabla2.departmentid,

tt_tabla2.caduca, tt_tabla2.did,

tt_tabla2.mid, tt_tabla2.yid

FROM tt_tabla1 INNER JOIN tt_tabla2 ON

tt_tabla1.did = tt_tabla2.did

AND tt_tabla1.mid = tt_tabla2.mid

AND tt_tabla1.yid = tt_tabla2.yid

WHERE tt_tabla1.did = '$dia' AND tt_tabla1.mid='$mes'

GROUP BY tt_tabla1.did AND tt_tabla1.mid AND tt_tabla1.yid

en la tabla uno aparecera un texto y en la tabla 2 varios docuemntos asociados al texto en la tabla 1 por fecha
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #4 (permalink)  
Antiguo 25/06/2009, 15:26
 
Fecha de Ingreso: diciembre-2007
Mensajes: 427
Antigüedad: 16 años, 4 meses
Puntos: 35
Respuesta: Relación de tabla

Esa es una consulta, no una estructura.
  #5 (permalink)  
Antiguo 26/06/2009, 07:23
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

creo que era mejor ver tirado ya la consulta de lo que en realidad queria para no dilatar tanto en la estructura
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #6 (permalink)  
Antiguo 26/06/2009, 07:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Relación de tabla

Las tablas definen las consultas. No al revés.
Es que de la estructura podemos deducir cuál es la consulta más óptima.
Con la consulta no sabemos si hay otras posibilidades que la mejoren, porque ignoramos cómo son las tablas involucradas y qué cosas has podido omitir considerar.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 26/06/2009, 09:10
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

ok aqui la estructura
CREATE TABLE `tt_tabla1` (
`eid` int(11) NOT NULL auto_increment,
`did` int(2) NOT NULL default '0',
`mid` int(2) NOT NULL default '0',
`yid` int(4) NOT NULL default '0',
`subtitle` varchar(255) default NULL,
`content` text NOT NULL,
PRIMARY KEY (`eid`),
KEY `eid` (`eid`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


CREATE TABLE `tt_tabla2` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(150) NOT NULL,
`descrip` text,
`title_href` varchar(100) default NULL,
`href` varchar(200) default NULL,
`usr_type` int(3) NOT NULL default '1',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`img_promotion` varchar(30) default NULL,
`departmentid` int(3) NOT NULL default '0',
`caduca` int(3) NOT NULL,
`did` int(2) NOT NULL default '0',
`mid` int(2) NOT NULL default '0',
`yid` varchar(4) NOT NULL default '0',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


bien vuelvo a dar el tema de mi problematíca

en la tabla tt_tabla1
tengo un registro con fecha ejemplo
26 - 06 - 2009

y en la tabla tt_tabla2
tengo varios registro con esa fecha
26 - 06 - 2009

y lo que quiero que salga es
registro tabla1
con los registro de la tabla2
en fecha iguales

en la tabla1 el registro va hacer unico por fecha
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #8 (permalink)  
Antiguo 26/06/2009, 09:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Relación de tabla

En principio la consulta es fácil pero... En la tabla tt:tabla1 no tienes ningún campo de fecha.. Pareciera que has separado la fecha en diferentes campos. ¿Es así? si has hecho eso estás desperdiciando espacio y complicando la consulta innecesariamente.
¿Sería posible modificar la estructura de datos que ya tienes o es una estructura fija?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 26/06/2009, 09:27
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

exacto he separado la fecha en diferentes campos el de la tabla 1 y a de ser así como lo pidieron
que esa va hacer l fecha unica

ahora bien en la tabla2
la primera fecha (datetime) es en el momento en que se registra en la BD
y la segunda fecha que esta separada es donde quiero hacer la relacion, proque sera ifno que se mostrara con la primera tabla

nota; es algo complicado eh, cualquier cosa para no dilatar la cosa podemos usar MP
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #10 (permalink)  
Antiguo 26/06/2009, 09:53
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Relación de tabla

Bueno, la cosa es relativamente sencilla.
Por lo que dices quieres que la consulta te devuelva todos los registros de las tablas tt_tabla1 y tt_tabla2 ordenados y agrupados en función de las fechas que figuran en la tt_tabla1.
Para que la cosa sea rápida y de escritura simple, lo mejor es reconstruir el DATE que se ha perdido al descomponer innecesariamente la fecha en tres campos (digo innecesariamente, porque entre otras cosas de esa forma usas 8 bytes, cuando con un DATE, alcanza y es más controlable).
Bien, la reconstrucción la haremos en una subconsulta:
Código sql:
Ver original
  1. SELECT DATE(CONCAT(`yid`,'-',`mid`,'-',`did`)) FECHA
  2. FROM tt_tabla1;

A esto lo usaremos como tabla de un INNER JOIN con la segunda tabla:
Código sql:
Ver original
  1. SELECT T1.*, T2.*
  2. FROM
  3.     (SELECT eid, DATE(CONCAT(`yid`,'-',`mid`,'-',`did`)) FECHA, subtitle, content
  4.     FROM tt_tabla1) T1
  5.     INNER JOIN
  6.     tt_tabla2 T2 ON T1.FECHA =  DATE(T2.`date`)
  7. ORDER BY T1.FECHA, T2.id
Esto debería funcionar.

Hay una segunda posibilidad, que debería funcionar igual, con una sintaxis más simple, y es esta:
Código sql:
Ver original
  1. SELECT T1.*, T2.*
  2. FROM
  3.     tt_tabla1 T1
  4.     INNER JOIN
  5.     tt_tabla2 T2 USING(`did`,`mid`,`yid`)
  6. ORDER BY DATE(CONCAT(`yid`,'-',`mid`,'-',`did`)), T2.id

Hay que probar.

Yo personalmente sigo sin entender qué ventaja le vieron a fragmentar la fecha en tres campos...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 26/06/2009, 09:57
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

pruebo y te digo

algo mas o menos use en la segunda parte parte

hago y luego comento
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
  #12 (permalink)  
Antiguo 30/06/2009, 10:18
Avatar de the_scorpion  
Fecha de Ingreso: mayo-2006
Ubicación: Cuba
Mensajes: 696
Antigüedad: 18 años
Puntos: 3
Respuesta: Relación de tabla

hola
buenas tardes
ok todo perfecto
implemente la segunda posibildiad y todo ok
ahora un pequeñito problema esta en que me sale repetido lo de la tabla1

aplique distinct para la primera tabla y no me repitera el id y nada
use tambien group by y nada tampoco cuan se la mejor variante

Cita:
SELECT T1.*, T2.*
FROM
tt_tabla1 T1
INNER JOIN
tt_tabla2 T2 USING(`did`,`mid`,`yid`)
ORDER BY DATE(CONCAT(`yid`,'-',`mid`,'-',`did`)), T2.id
GROUP BY tt_tabla1.eid
en que estoy fallando
__________________
Que hablen mal de uno es espantoso. Pero hay algo peor: que no hablen.
Quien hace, puede equivocarse. Quien nada hace, ya está equivocado".
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 00:16.