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

Duda con ID de usuario

Estas en el tema de Duda con ID de usuario en el foro de Mysql en Foros del Web. Hola chicos, Pequeña duda... A ver, os cuento: Tengo 2 tablas en una BBDD. En una, guardo los mensajes, digamos que tiene la siguiente estructura ...
  #1 (permalink)  
Antiguo 10/03/2011, 13:37
Avatar de dART  
Fecha de Ingreso: enero-2009
Ubicación: Madrid
Mensajes: 246
Antigüedad: 15 años, 3 meses
Puntos: 7
Duda con ID de usuario

Hola chicos,
Pequeña duda... A ver, os cuento:

Tengo 2 tablas en una BBDD. En una, guardo los mensajes, digamos que tiene la siguiente estructura (INNODB):

Código:
id_mensaje
id_remitente
id_destino
texto_mensaje
fecha_mensaje
mensaje_leido

PRIMARY KEY (id_mensaje)
KEY id_remitente (id_remitente, id_destino)
KEY id_destino (id_destino)

Pero relaciono id_remitente e id_destino con usuarios.id_usuario.... el problema viene cuando accedo a la tabla a traves de PHP con un INNER JOIN y claro... ¿cómo extraerle el "nombre_usuario" del destinatario y el "nombre_usuario" del remitente?
  #2 (permalink)  
Antiguo 10/03/2011, 13:41
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, 4 meses
Puntos: 2658
Respuesta: Duda con ID de usuario

Por sus nombres de tablas o sus ALIAS. Pero para hacer eso debes hacer un doble INNER JOIN:
Código MySQL:
Ver original
  1. SELECT campos
  2. FROM mensajes M
  3.       INNER JOIN usuarios U1 ON M.id_remitente = U1.is_usuario
  4.       INNER JOIN usuarios U2 ON M.id_dstino = U2.is_usuario
__________________
¿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 10/03/2011, 13:44
Avatar de dART  
Fecha de Ingreso: enero-2009
Ubicación: Madrid
Mensajes: 246
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Duda con ID de usuario

Voy a probar, vuelvo ahora y te doy Karma que seguro que funciona!!
Gracias tío ;)
  #4 (permalink)  
Antiguo 10/03/2011, 14:04
Avatar de dART  
Fecha de Ingreso: enero-2009
Ubicación: Madrid
Mensajes: 246
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Duda con ID de usuario

Tengo la consulta así:

Código:
/*
	Compruebo si tiene mensajes privados */
	$mensajes_unread = $mysqli->query("SELECT * FROM usuarios_mensajes M
		INNER JOIN usuarios U1 ON M.id_remitente = U1.id_usuario 
		INNER JOIN usuarios U2 ON M.id_destino = U2.id_usuario WHERE U2.nick_usuario='$logged' AND mensaje_leido='0'") or die($mysqli->error);
Y lo muestro de esta forma:

Código:
while($unread = $mensajes_unread->fetch_array()){
   echo "('.$unread['U1.nick_usuario'].')";
}
Pero no me imprime nada.. ¿qué hago mal?
  #5 (permalink)  
Antiguo 10/03/2011, 14:55
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, 4 meses
Puntos: 2658
Respuesta: Duda con ID de usuario

Primero que nada, prueba la consulta con alguna interfase de tipo phpMyAdmin, Navicat, Workbench o alguna semejante. SI la consulta, ejecutada directamente, devuelve datos, tu problema está en el PHP y eso lo tienes que consultar en el Foro de PHP, no aquí (normas del foro), pero antes, verifica que la variable realmente tenga algo (es el error más común).

Si la consulta genera error, veremos cuál error es.

Si no genera error, pero no devuelve datos, entonces es que no hay datos que cumplan con la condición, o los datos son erróneos (errores de datos en tabla).

Verifica primero eso. Luego vemos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 11/03/2011, 10:32
Avatar de dART  
Fecha de Ingreso: enero-2009
Ubicación: Madrid
Mensajes: 246
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Duda con ID de usuario

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Código MySQL:
Ver original
  1. SELECT campos
  2. FROM mensajes M
  3.       INNER JOIN usuarios U1 ON M.id_remitente = U1.is_usuario
  4.       INNER JOIN usuarios U2 ON M.id_dstino = U2.is_usuario
y el WHERE como sería? No es que me devuelva error, es que directamente me imprime que no hay registros (que será porque la condición no se cumple). He comprobado la variable y si que imprime el nick del usuario. No entiendo qué hago mal...


Código PHP:
/*
Compruebo si tiene mensajes privados */
$mensajes_unread $mysqli->query("SELECT * FROM usuarios_mensajes M
        INNER JOIN usuarios U1 ON M.id_remitente = U1.id_usuario 
        INNER JOIN usuarios U2 ON M.id_destino = U2.id_usuario WHERE U1.nick_usuario='$logged' AND mensaje_leido='0'"
) or die($mysqli->error); 

usuarios_mensajes.sql
Código:
CREATE TABLE IF NOT EXISTS `usuarios_mensajes` (
  `id_mensaje` int(11) NOT NULL auto_increment,
  `id_remitente` int(11) NOT NULL,
  `id_destino` int(11) NOT NULL,
  `texto_mensaje` text NOT NULL,
  `fecha_mensaje` date NOT NULL,
  `mensaje_leido` enum('0','1') NOT NULL default '0',
  PRIMARY KEY  (`id_mensaje`),
  KEY `id_destino` (`id_destino`),
  KEY `id_remitente` (`id_remitente`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

--
-- Filtros para las tablas descargadas (dump)
--

--
-- Filtros para la tabla `usuarios_mensajes`
--
ALTER TABLE `usuarios_mensajes`
  ADD CONSTRAINT `usuarios_mensajes_ibfk_1` FOREIGN KEY (`id_remitente`) REFERENCES `usuarios` (`id_usuario`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  ADD CONSTRAINT `usuarios_mensajes_ibfk_2` FOREIGN KEY (`id_destino`) REFERENCES `usuarios` (`id_usuario`) ON DELETE NO ACTION ON UPDATE NO ACTION;

Muchísimas gracias tío, eres una gran ayuda
  #7 (permalink)  
Antiguo 12/03/2011, 04:04
Avatar de dART  
Fecha de Ingreso: enero-2009
Ubicación: Madrid
Mensajes: 246
Antigüedad: 15 años, 3 meses
Puntos: 7
Respuesta: Duda con ID de usuario

Lo conseguí!
Joder.... qué tontería. Tenía mal la condición, como bien decías...

Muchísimas gracias ;)

Etiquetas: 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 00:48.