Foros del Web » Programando para Internet » PHP »

Duda en consulta SQL

Estas en el tema de Duda en consulta SQL en el foro de PHP en Foros del Web. Hola amigos, tengo estas tablas: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original CREATE TABLE IF NOT EXISTS `messages` (   `id` INT ( 11 ) NOT ...
  #1 (permalink)  
Antiguo 04/05/2015, 03:20
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Duda en consulta SQL

Hola amigos, tengo estas tablas:

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `messages` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `userid` INT(11) NOT NULL,
  4.   `message` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL,
  5.   `date_message` datetime DEFAULT NULL,
  6.   PRIMARY KEY (`id`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=76 ;

Código SQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `users` (
  2.   `id` INT(11) NOT NULL AUTO_INCREMENT,
  3.   `username` VARCHAR(200) COLLATE utf8_spanish_ci NOT NULL,
  4.   `email` VARCHAR(255) COLLATE utf8_spanish_ci NOT NULL,
  5.   `password` VARCHAR(200) COLLATE utf8_spanish_ci NOT NULL,
  6.   `nombre` VARCHAR(30) COLLATE utf8_spanish_ci NOT NULL,
  7.   `apellidos` VARCHAR(40) COLLATE utf8_spanish_ci NOT NULL,
  8.   `fecha_nacimiento` DATE NOT NULL,
  9.   PRIMARY KEY (`id`)
  10. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=9 ;




Quiero obtener el nombre de usuario del autor de un mensaje (sin ponerlo explicitamente, claro). Para esto necesito la id del mensaje, me estoy haciendo un poco de lio en la cabeza en la consulta, a ver si alguien me puede ayudar!
  #2 (permalink)  
Antiguo 04/05/2015, 05:26
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Duda en consulta SQL

Te dejo un ejemplo de como sacar el mensaje para cada usuario:

Código MySQL:
Ver original
  1. SELECT m.message, m.date_message, u.username
  2. FROM messages AS m, users AS u
  3. WHERE m.userid = u.id

Los resultados a mostrar en esta consulta seria: mensaje, fecha del mensaje y nombre de usuario del mensaje

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #3 (permalink)  
Antiguo 04/05/2015, 08:27
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda en consulta SQL

Gracias, pero lo que queria hacer es otra cosa, me explico.

Tengo un sistema de comentarios, tengo que sacar la foto de perfil de cada usuario. Las fotos de perfil las tengo en una carpeta, donde se van guardando, se guardan con el mismo nombre del usuario.

Aqui esta el codigo donde se carga cada mensaje.

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las reglas del foro, por favor.
Aqui esta la funcion, que me marca un error, como lo podria hacer?


Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las reglas del foro, por favor.
Código SQL:
Ver original
  1. SELECT u.username FROM messages AS m, users AS u WHERE m.userid = u.id);

GRACIAS!

Última edición por gnzsoloyo; 04/05/2015 a las 09:00
  #4 (permalink)  
Antiguo 04/05/2015, 09:02
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 en consulta SQL

Cita:
Quiero obtener el nombre de usuario del autor de un mensaje (sin ponerlo explicitamente, claro). Para esto necesito la id del mensaje,
La consuta que te proponen hace exactamente eso, con la sola salvedad de qe el WHERE debería incluir el ID del mensaje para obtener los datos buscados.

¿Qué error de MySQL te devuelve?

Nota Bene: Si el error es de PHP, no es tema de este foro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 06/05/2015, 03:57
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda en consulta SQL

Cita:
Iniciado por gnzsoloyo Ver Mensaje
La consuta que te proponen hace exactamente eso, con la sola salvedad de qe el WHERE debería incluir el ID del mensaje para obtener los datos buscados.

¿Qué error de MySQL te devuelve?

Nota Bene: Si el error es de PHP, no es tema de este foro.

Mi duda es, como obtengo la id del mensaje en cuestion para mostrar la foto?

Cada mensaje sera de un autor diferente y tendra una foto diferente.
  #6 (permalink)  
Antiguo 06/05/2015, 04:08
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 en consulta SQL

Sigue sin ser claro lo que quieres.
- Si tienes el usuario, puedes recuperar sus mensajes.
- Si recuperas los mensajes, puedes obtener al mismo tiempo sus ID.
- Si el usuario selecciona uno, se supone que todavía conservas el ID en la aplicación, de lodo que puedes mandar a buscar todos sus datos...

Me esta pareciendo que tu problema no es la consulta sino como hacer la parte de programación, o bien como crear consultas en programación.

¿Es eso?
__________________
¿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 06/05/2015, 04:19
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Duda en consulta SQL

Retocando un poco la consulta que te postee te funcionaria, aun que no entiendo exactamente que tiene que ver el id del mensaje a la foto del usuario...

Pero con esto sacarias el id del mesanej, el mensaje y el nombre de usuario del mensaje.

Código MySQL:
Ver original
  1. SELECT m.id, m.message, u.username
  2. FROM messages AS m, users AS u
  3. WHERE m.userid = u.id

Ahora deverias sacar los datos de lado del servidor que estes utilizando.

Aun que no sé si es esto lo que pretendes. ¿Podrias detallarnos mas lo que pretendes?

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.

Última edición por MaNuX0218; 07/05/2015 a las 08:04
  #8 (permalink)  
Antiguo 07/05/2015, 09:13
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda en consulta SQL

Antes de nada, gracias por las respuestas.

A ver si ahora lo entendeis mejor, os pongo las tablas con ejemplos:



TABLA messages

id/userid/message/date

34/2/hola que tal/05-05-2015
35/3/que frio hace/05-05-2015
36/4/que llegue el viernes/05-05-2015


TABLA users
id/username/email/pass/nombre/fecha_nacimiento

2/pepe/blablabla...
3/ana/blablabla...
4/yoel/blablabla...

Y lo que quiero es: obtener el users.username mientras que messages.userid sea igual a users.id.

PORQUE?


Quiero obtener el nombre de usuario para poder mostrar la foto de perfil, que las guardo en una carpeta y las renombro segun el usuario. Por ejemplo la foto de perfil de pepe es "pepe.jpg" y la de ana es "ana.jpg", mi sistema de subir la foto es que la guardo en una carpeta y les pongo el nombre del usuario.

Entonces quiero el nombre del usuario que ha escrito un mensaje para devolverlo al html y poder mostrar en el html -----> <img src="RESULTADO DEL SQL">.


La consulta que me habiais puesto antes:
Código SQL:
Ver original
  1. SELECT u.username FROM messages AS m, users AS u WHERE m.userid = u.id


Me muestra todos los username que han escrito un mensaje, yo solo quiero el username que ha escrito ESE MENSAJE, por ejemplo el de la id 34.



Espero que se haya entendido mejor, gracias.

Última edición por gnzsoloyo; 07/05/2015 a las 10:06
  #9 (permalink)  
Antiguo 07/05/2015, 09:22
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Duda en consulta SQL

el query que te dieron hace lo que pides, ahora si solo quieres un mensaje en especifico, cual es el criterio que debes de tomar para saber que ocupas "Ese mensaje" o como saber que nada mas ocupas el del id 34???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 07/05/2015, 09:24
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Duda en consulta SQL

Asi te deveria sacar solo el nombre de usuario:

Código MySQL:
Ver original
  1. SELECT u.username
  2. FROM users AS u, messages AS m
  3. WHERE u.id = m.userid

Pruebalo y dime como te fue.

Saludos.
__________________
No te preocupes si tu código no funciona bien. Si todo lo hiciera, no tendrías trabajo.
  #11 (permalink)  
Antiguo 07/05/2015, 10:14
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 en consulta SQL

Cita:
Iniciado por IVICP3 Ver Mensaje
Me muestra todos los username que han escrito un mensaje, yo solo quiero el username que ha escrito ESE MENSAJE, por ejemplo el de la id 34.

Espero que se haya entendido mejor, gracias.
El tema no es que no lo entendamos, Es que la base no va a adivinar cuál mensaje es a menos que se lo indiques.
Esa parte ya es una interacción entre la aplicación y la base, donde deben hacerse varias consultas a fin de ir filtrando lo que necesitas.

Volvienod al tu post inicial, quieres esto:
Cita:
Quiero obtener el nombre de usuario del autor de un mensaje (sin ponerlo explicitamente, claro). Para esto necesito la id del mensaje, me estoy haciendo un poco de lio en la cabeza en la consulta, a ver si alguien me puede ayudar!
Entendamos que no hay forma de mostrar el usuario autor de un mensaje sin explicitar de algún modo el mensaje a que quieres referirte. MySQL no puede adivinar lo que buscas...

¿Eso queda claro?

Ergo:
- Puedes obtener todos los mensajes de un usuario logueado.
- Puedes obtener toda la cadena de mensajes de un hilo.
- Puedes obtener todos los mensajes de todos los usuarios.

Pero para obtener UN mensaje, de UN usuario, forzosamente necesitas enviarle ambos ID a la base en la query, en un WHERE adecuado a tal consulta.

La pregunta para tí es: ¿Cómo haces para identificar TU en la aplciación lo que quieres buscar en la base...?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 07/05/2015 a las 10:29
  #12 (permalink)  
Antiguo 09/05/2015, 07:38
 
Fecha de Ingreso: febrero-2015
Mensajes: 61
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: Duda en consulta SQL

Hola de nuevo, gracias por las respuestas, indagando un poco he llegado a esto.


FUNCION QUE RECORRE LOS MENSAJES
Código PHP:
Ver original
  1. <?php
  2. //recorremos los mensajes
  3. $show_messages = $nuevo->messages($_SESSION['id']);
  4.     if(!(empty($show_messages)))
  5.     {
  6.     foreach($show_messages as $message){
  7.         $id=$message['id'];
  8.         $comments = $nuevo->comments($id);
  9.         $gravatar = $nuevo->get_gravatar($id);
  10.     ?>
  11.         <br>
  12.  
  13.         <div class="grid_5 push_3 messages" id="other_comments" style="margin-top: 10px">
  14.         <img src="img/usuarios/<?php echo $gravatar;?>.jpg" width="40" height="40" /><br>
  15.         <?=$message['username']?><span style="float: right;"><?=$message['date_message']?></span><br><br>
  16.         <?=$nuevo->link($message['message'])?>
  17.         <br>
  18.         <br>
  19.         </div><br><br>

En la linea 9 vemos como llamo a la funcion de abajo, pasandole la variable $id, que es el numero de id de cada mensaje.

En la linea 14 vemos como tengo el atributo img, con la ruta de la carpeta pero el nombre del archivo es lo que tengo que obtener en la funcion de abajo (porque es el nombre del usuario)




FUNCION QUE RECOJE EL NOMBRE DE USUARIO
Código PHP:
Ver original
  1. public function get_gravatar($id)
  2.     {
  3.  
  4.         $foto = $this->connect->prepare("SELECT u.username FROM users AS u, messages AS m WHERE u.id IN(SELECT m.userid FROM messages WHERE m.id = $id");
  5.         $foto->execute();
  6.  
  7.  
  8.         if(!empty($foto))
  9.         {
  10.             return $foto;
  11.         }
  12.    
  13.     }

Creo una variable $foto y la igualo al resultado de la consulta, que creo que ahora esta correctamente y me devuelve el nombre de usuario.




CUAL ES EL ERROR?

Me sale esto.



El error se refiere a la linea 14 de la 1ª funcion.





A ver si me pueden ayudar, gracias.
  #13 (permalink)  
Antiguo 09/05/2015, 10:12
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 en consulta SQL

Por favor, ya te lo he dicho antes, no se tratan temas de programación en los foros de Bases de Datos.
Como no me has pedido moverlo de foro, pero insistes con PHP, procedo a realizar el cambio para que puedas continuar en el foro correcto, que no es el de MySQL.

OFF TOPIC en MYSQL.

Movido a PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 09/05/2015, 10:25
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Duda en consulta SQL

Empieza por depurar tu código, el error es mas que claro, hasta un ciego lo entendería lee con atención.

COULD NOT BE CONVERTED TO STRING

Si no sabes Ingles usa el traductor.

Etiquetas: fecha, mysql, sql, tabla
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:28.