Foros del Web » Programando para Internet » PHP »

Como relacionar esta consulta

Estas en el tema de Como relacionar esta consulta en el foro de PHP en Foros del Web. Hola compañeros, veran tengo una tabla en la que guardo comentarios hechos por usuarios y por sociedades. En la tabla comentarios guardo el id del ...
  #1 (permalink)  
Antiguo 13/12/2011, 09:28
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Como relacionar esta consulta

Hola compañeros,

veran tengo una tabla en la que guardo comentarios hechos por usuarios y por sociedades. En la tabla comentarios guardo el id del usuario o de la sociedad anteponiendo "u" o "s" si es un usuario o protectora quedando u12 para el usuario con id 12 y s23 para la protectora con id 23. Utilizo este sistema por otro motivo ajeno a este.

El problema está al sacar el nombre del usuario o sociedad que lo a sacado, no consigo relacionar la consulta para obtener solo el nombre del que lo ha escrito. He pensado que tengo que plantearme hacer una entidad relacion nueva para ambas tablas pero antes queria consultaros si habría alguna consulta que me sirviera para mi caso o que veis mas optimo.

Hasta el momento hago esta consulta
Código HTML:
SELECT usuario.nombre, sociedades.usuario, comentario FROM usuarios, sociedades, tablon WHERE tablon.id_usuario = usuarios.id AND tablon.id_usuario = sociedades.id
pero me muestra por cada id el nombre del usuario y de la sociedad con ese id.

¿Que soluciones me proponeis? a ser posible manteniendo la misma forma en que guardo el id.

Creo que se puede hacer con JOIN LEFT pero no tengo mucha experiencia con las consultas de ese tipo, o no se el HAVING.

Saludos!
  #2 (permalink)  
Antiguo 14/12/2011, 14:02
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Como relacionar esta consulta

He pensado en crear una relación entre las tablas, usuarios relacionado con comentarios_usuarios, comentarios_usuarios relacionado con tablon e igualmente para las protectoras

La cosa es que la consulta me devuelve 0 valores, ahora si que si necesito hacer la consulta con LEFT JOIN el problema es que no se usarlo. Siendo esta la consulta como sería? o de que otra manera se haría?

Código HTML:
SELECT usuarios.nombre_usuario, protectoras.nombre, tablon.comentario FROM usuarios, protectoras, comentarios_usuarios, comentarios_protectoras, tablon WHERE usuarios.id = comentarios_usuarios.id_usuario AND comentarios_usuarios.id_comentario = tablon.id AND protectoras.id = comentarios_protectoras.id_protectora AND comentarios_protectoras.id_comentario = tablon.id
  #3 (permalink)  
Antiguo 14/12/2011, 16:37
 
Fecha de Ingreso: enero-2010
Mensajes: 389
Antigüedad: 14 años, 3 meses
Puntos: 4
Respuesta: Como relacionar esta consulta

moderadores movedlo a MySQL por favor para no duplicar, no me dí cuenta del foro de MySQL XD
  #4 (permalink)  
Antiguo 15/12/2011, 14:00
Avatar de leo_  
Fecha de Ingreso: abril-2008
Mensajes: 40
Antigüedad: 16 años
Puntos: 11
Respuesta: Como relacionar esta consulta

Hola mira cree las tablas de esta forma:
Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `sociedades` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `nombre` VARCHAR(400) COLLATE utf8_spanish_ci DEFAULT NULL,
  4.   PRIMARY KEY (`id`)
  5. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=3 ;
  6.  
  7. INSERT INTO `sociedades` (`id`, `nombre`) VALUES
  8. (1, 'Real Sociedad de Atorrantes Unidos'),
  9. (2, 'Sociedad Todos por los Chicos');
  10.  
  11. CREATE TABLE IF NOT EXISTS `tablon` (
  12.   `id` VARCHAR(10) COLLATE utf8_spanish_ci NOT NULL,
  13.   `comentario` text COLLATE utf8_spanish_ci NOT NULL
  14. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
  15.  
  16. INSERT INTO `tablon` (`id`, `comentario`) VALUES
  17. ('u2', 'Me gusto mucho la parte en la que el personaje principal saltaba por los techos porque se estaba escapando del marido de la mujer. Saludos.'),
  18. ('s1', 'Muy buena atención post venta. Muy recomendable. Esperamos en el futuro seguir haciendo negocios con su compañia. ');
  19.  
  20. CREATE TABLE IF NOT EXISTS `usuarios` (
  21.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  22.   `nombre` VARCHAR(400) COLLATE utf8_spanish_ci DEFAULT NULL,
  23.   PRIMARY KEY (`id`)
  24. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=3 ;
  25.  
  26. INSERT INTO `usuarios` (`id`, `nombre`) VALUES
  27. (1, 'Mario Gomes'),
  28. (2, 'Raul Valdez');

Y con esta consulta se puede ver los datos como querias:
Código SQL:
Ver original
  1. SELECT t2.nombre, tablon.comentario FROM tablon
  2. JOIN
  3.    (SELECT concat('u',id) AS idx, nombre FROM usuarios
  4.     UNION
  5.     SELECT concat('s',id), nombre FROM sociedades) AS t2
  6. ON
  7.     tablon.id = t2.idx

Bueno es una idea. Espero q te sea de ayuda. Saludos.

Etiquetas: relacionar, tabla, usuarios
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:25.