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

[MYSQL] Hacer consulta relacionando datos de 2 tablas

Estas en el tema de [MYSQL] Hacer consulta relacionando datos de 2 tablas en el foro de Bases de Datos General en Foros del Web. hola, tengo 2 tablas site_modules: ID ||TITLE || FILE || DESCRIPTION y en la otra almaceno permisos para varios "targets" que pueden ser modulos, bloques, ...
  #1 (permalink)  
Antiguo 29/12/2004, 11:30
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años
Puntos: 4
[MYSQL] Hacer consulta relacionando datos de 2 tablas

hola, tengo 2 tablas

site_modules:
ID ||TITLE || FILE || DESCRIPTION

y en la otra almaceno permisos para varios "targets" que pueden ser modulos, bloques, o alguna opcion

site_permissions
TARGET_TYPE || TARGET || ENTITY_TYPE || ENTITY_ID || PERMISSION

con esta consulta a site_permissions obtengo una lista de los permisos que tiene el usuario para saber q modulos puede ver

Código:
SELECT target FROM site_permission WHERE target_type="mod_view" AND entity_type="l" AND entity_id="-1"
esta consulta me retorna:
+--------+
| target |
+--------+
| 0 |
| 1 |
| 2 |
+--------+

ahora me gustaría mezclar los datos de esa consulta para que en vez de retornarme los numero, me retorne los title de la primera tabla para que quedara algo asi

+------------------+
| target |
+------------------+
| titulo xx del mod 1 |
| titulo yy del mod 1 |
| titulo zz del mod 1 |
+------------------+

¿como puedo hacer esto con una consulta SQL y no con programacion?


+ detalles, aki un dump para que funcione mi ejemplo

Código:
CREATE TABLE `site_modules` (
  `id` int(11) NOT NULL auto_increment,
  `title` varchar(100) NOT NULL default '',
  `file` varchar(100) NOT NULL default '',
  `template` varchar(100) NOT NULL default '',
  `position` varchar(100) NOT NULL default '',
  `description` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

-- 
-- Volcar la base de datos para la tabla `site_modules`
-- 

INSERT INTO `site_modules` VALUES (0, 'Principal', 'mod_home.php', '', '', '');
INSERT INTO `site_modules` VALUES (1, 'Noticias', 'mod_news.php', '', '', '');
INSERT INTO `site_modules` VALUES (2, 'Autores', '', '', '', '');

-- --------------------------------------------------------

-- 
-- Estructura de tabla para la tabla `site_permission`
-- 

CREATE TABLE `site_permission` (
  `target_type` varchar(100) NOT NULL default '',
  `target` varchar(100) NOT NULL default '',
  `entity_type` char(1) NOT NULL default '',
  `entity_id` varchar(100) NOT NULL default '',
  `permission` varchar(100) NOT NULL default '',
  `description` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`target`,`entity_type`,`entity_id`,`permission`,`target_type`)
) TYPE=MyISAM;

-- 
-- Volcar la base de datos para la tabla `site_permission`
-- 

INSERT INTO `site_permission` VALUES ('mod_view', '1', 'l', '0', '1', '');
INSERT INTO `site_permission` VALUES ('mod_view', '2', 'l', '0', '1', '');
INSERT INTO `site_permission` VALUES ('mod_view', '1', 'l', '-1', '1', '');
INSERT INTO `site_permission` VALUES ('mod_view', '0', 'l', '-1', '1', '');
  #2 (permalink)  
Antiguo 30/12/2004, 01:59
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 21 años, 3 meses
Puntos: 2
En el manual tienes como hacer cruces de tablas.
En tu caso, parece, que la sentencia sería esta:
Código:
select b.title, b.file
from site_modules a join site_permisions b on a.id = b.target
WHERE target_type="mod_view" AND entity_type="l" AND entity_id="-1"
Espero que te sirva.
Un saludo.

NOTA: cuando hagas consultas de este estilo, no llega con poner la estructura de las tablas, pues si los campos equivalentes no se llaman igual en ambas tablas es difícil saber si se está haciendo bien o no. Lo mejor es meter un breve comentario sobre el significado de los campos, sobre todo de aquellos que son significativos.
__________________
Estoy contagiado de Generación-I
  #3 (permalink)  
Antiguo 30/12/2004, 08:23
Avatar de ArrauKano  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago
Mensajes: 664
Antigüedad: 22 años
Puntos: 4
o, no puedo creer q me alla funcionado,
me salvo la vida, gracias :D
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 14:23.