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

Mostrar el nombre

Estas en el tema de Mostrar el nombre en el foro de Mysql en Foros del Web. Hola a todos. Tengo un problemilla que suguro es facil, pero yo no saco la solucion. He creado un juego de registros donde listo unos ...
  #1 (permalink)  
Antiguo 26/01/2010, 11:46
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Mostrar el nombre

Hola a todos. Tengo un problemilla que suguro es facil, pero yo no saco la solucion.
He creado un juego de registros donde listo unos datos, estos me salen bien, peroooo me saca el id del usuario (que es realmente lo que inserta), ahora lo que quiero es que en vez de mostrarme el ID, me muestre el nombre de ese ID. Tengo las tablas vinculadas. Alguien me echa una mano?
Un saludo
  #2 (permalink)  
Antiguo 26/01/2010, 11:56
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Mostrar el nombre

Con un JOIN puedes unir ambas tablas y mostrar los datos que necesitas:
http://dev.mysql.com/doc/refman/5.0/es/join.html
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #3 (permalink)  
Antiguo 26/01/2010, 11:56
 
Fecha de Ingreso: enero-2010
Ubicación: Estelí, Nicaragua
Mensajes: 157
Antigüedad: 14 años, 3 meses
Puntos: 8
Respuesta: Mostrar el nombre

podrias usar lo siguiente:

select id, nombre from tabla1 inner join tabla2 on tabla1.id=tabla2.id

comentas el resultado
  #4 (permalink)  
Antiguo 26/01/2010, 12:01
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Perdonar mi ignorancia, nunca he usado ese comando. Si yo tengo esta consulta SELECT * FROM oreja, gente WHERE gente.id_gente = oreja.usua_envia_beso como deberia de ser con el JOIN?
Gracias de nuevo
  #5 (permalink)  
Antiguo 26/01/2010, 12:32
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Mostrar el nombre

Código SQL:
Ver original
  1. SELECT * FROM oreja INNER JOIN gente ON gente.id_gente = oreja.usua_envia_beso

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 26/01/2010, 13:14
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Sigo sin entender, me sale lo mismo que tenia. coloco esto <?php echo $row_Besos['usua_envia_beso']; ?><?php echo $row_Besos['usua_recibe_beso']; ?> y me salem los registros correspondientes, o sea "1" y "4" que corresponden a los usuarios que quiero imprimir, pero no se como decirle que me saque los nombres en vez del ID.
Una vez mas siento mi ignorancia
  #7 (permalink)  
Antiguo 26/01/2010, 13:24
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Mostrar el nombre

¿Cuál es el nombre del campo donde almacenas el nombre de usuario?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #8 (permalink)  
Antiguo 26/01/2010, 16:08
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

el campo se llama "nombre"
  #9 (permalink)  
Antiguo 26/01/2010, 16:49
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Mostrar el nombre

Pues entonces a la hora de recoger la información de usuario lo deberías recoger como $row_Besos['nombre']
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #10 (permalink)  
Antiguo 27/01/2010, 03:12
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Pero me saldría el mismo nombre en los 2 campos. Ese es el problema que tengo. Por ejemplo. Si imprimo <?php echo $row_Besos['usua_envia_beso']; ?> me sale "1" si pongo lo que tu me dices me sale "Miguel", si imprimo <?php echo $row_Besos['usua_recibe_beso']; ?> me sale "4" y si pongo lo que tu me dices, me vuelve a salir "Miguel" cuando debería de salir "Jose".
  #11 (permalink)  
Antiguo 27/01/2010, 03:46
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar el nombre

Ese es otro problema, pues para eso tendrías que volver a la misma tabla, pero antes debes decirnos la estructura de tus dos tablas para que podamos ofrecerte una sintaxis que te traiga los dos nombres. Quiero decirte que ya no es un problema sólo de nombre de campo o alias, sino también de consulta. Habrá que ampliar un poco la que tienes.
  #12 (permalink)  
Antiguo 27/01/2010, 10:00
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

expongo la estructura.
Tengo 2 tablas " gente" y "orejas" en la tabla "orejas" tengo varios campos, 2 de ellos corresponden a usuarios e inserto los ID de ellos, estos campos se llaman "usuario_envia" y "usuario_recibe". Estos 2 campos estan relacionados internamente con la tabla "gente", o sea que si en en el campo "usuario_envia" hay un "1" pues me saldria que corresponde a Miguel. No se que mas decir, solo que no se como hacerlo para que pueda imprimir en pantalla los nombres en vez de los ID's. Un saludo
  #13 (permalink)  
Antiguo 27/01/2010, 10:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Mostrar el nombre

Usa una consulta como esta:
SELECT gente1.nombre usuarioenvia, gente2.nombre usuariorecibe FROM `orejas` INNER JOIN gente gente1 ON gente1.ID = orejas.usuario_envia INNER JOIN gente gente2 ON gente2.ID = orejas.usuario_recibe

y carga los datos con los datos con sus alias, es decir,
$row_Besos['usuarioenvia'] y $row_Besos['usuariorecibe']

Edito: te había puesto mal los alias en las variables. Compruébalos.

Última edición por jurena; 27/01/2010 a las 10:29
  #14 (permalink)  
Antiguo 27/01/2010, 10:23
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

pruebo a ver, muchas gracias
  #15 (permalink)  
Antiguo 27/01/2010, 10:29
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

me da este mensaje "Table 'admin_gente2010.orejas' doesn't exist"
  #16 (permalink)  
Antiguo 27/01/2010, 10:38
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

perdon, ya esta solucionado, el problema era que en vez de orejas, era oreja. Muchas gracias
  #17 (permalink)  
Antiguo 30/01/2010, 07:25
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Hola Jurena. He colocado tu codigo y me va bien, pero cuando queiro meterle mas datos no me funiona. esto es lo que tengo ahora
Código PHP:
SELECT gente1.nombre usuaenviagente2.nombre usuarecibegente3.nombre usarioenviaorejagente4.nombre usuariorecibeoreja FROM oreja INNER JOIN gente gente1 ON gente1.id_gente oreja.usua_envia_beso INNER JOIN gente gente2 ON gente2.id_gente oreja.usua_recibe_beso INNER JOIN gente gente3 ON gente3.id_gente oreja.usuario_envia_oreja INNER JOIN gente gente4 ON gente4.id_gente oreja.usuario_recibe_oreja ORDER BY id_oreja ASC"; 
Si le quito los campos gente3.oreja y gente4.oreja, me funiona, pero si intento colocarle mas campos, deja de hacerlo.
Lo que quiero hacer es que me saque las lineas segun el ID. en esta tabla inserto datos segun donde seleccione el usuario.
POr ejemplo. En la tabla tengo 6 campos "usaurio_envia_oreja", "usaurio_envia_beso", "usuario_envia_gustas", "usuario_recibe_beso","usuario_recibe_oreja","usua rio_recibe_gustas".
Si un uusario le da a enviar beso, me inserta una linea en la BB.DD y las demas las deja en NULL.
Ahora lo que hago es listarlo por ORDEN DE ID, pero no me funciona.
Donde puede estar el fallo?
Un saludo
  #18 (permalink)  
Antiguo 30/01/2010, 08:19
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: Mostrar el nombre

Según lo que posteas:
Código MySQL:
Ver original
  1.      gente1.nombre usuaenvia,
  2.      gente2.nombre usuarecibe,
  3.      gente3.nombre usarioenviaoreja,
  4.      gente4.nombre usuariorecibeoreja
  5. FROM oreja
  6.      INNER JOIN gente gente1 ON gente1.id_gente = oreja.usua_envia_beso
  7.      INNER JOIN gente gente2 ON gente2.id_gente = oreja.usua_recibe_beso
  8.      INNER JOIN gente gente3 ON gente3.id_gente = oreja.usuario_envia_oreja
  9.      INNER JOIN gente gente4 ON gente4.id_gente = oreja.usuario_recibe_oreja
  10. ORDER BY id_oreja ASC

Cita:
Si le quito los campos gente3.oreja y gente4.oreja, me funiona, pero si intento colocarle mas campos, deja de hacerlo.
En primer lugar, deberías decirnos qué es lo que devuelve la consulta.
Si devuelve un error, debes decirnos qué error. Nadie puede responder nad si no aportas información precisa; estaríamos adivinando.
Si no devuelve un error, y si devuelve un encabezado de tabla, pero sin registros, entonces la consulta funciona, pero la misma no obtiene resultados porque no hay registros que cumplan esas condiciones.

Cita:
POr ejemplo. En la tabla tengo 6 campos "usaurio_envia_oreja", "usaurio_envia_beso", "usuario_envia_gustas", "usuario_recibe_beso","usuario_recibe_oreja"," usua rio_recibe_gustas".
Si un uusario le da a enviar beso, me inserta una linea en la BB.DD y las demas las deja en NULL.
Ahora lo que hago es listarlo por ORDEN DE ID, pero no me funciona.
Donde puede estar el fallo?
Por tu descripción, a mi entender tienes un diseño ineficiente, con alta probabilidad de dar errores o resultados erróneos.
Estás tratando con algo de liviandad el tema de los NULL, si tienes muchos campos con NULL en una determinada condición lo que tienes es un error de diseño, ya que eso significa que las relaciones entre entidades no debes estar agrupadas de la forma en que lo planteaste. Es posible que una mayor cantidad de tablas, administrando cada relación directa, fuera una mejor opción.
En cualquier caso, piensa esto: Un INNER JOIN devuelve registro sólo si hay coincidencias entre todas sus partes, si una sola no lo tiene, ese registro no se devuelve.

Yo plantearía primero una prueba de la consulta usando LEFT JOIN en lugar de INNER JOIN para ver si hay puntos de registros que no tienen coincidencias, lo que marcaría por qué no funciona la consulta original.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #19 (permalink)  
Antiguo 30/01/2010, 09:22
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Muchas gracias, no sabia que el INNER JOIN no devolviera resultados si hay NULL, en este caso existen esos NULL ya que 4 campos tienen que estar en NULL. si pongo tablas diferente, tendria que hacer varias consultas y una debajode otra. Lo que quiero hacer es que me salgan los resultados siguiendo esa tabla en una sola consulta. Es para hacer algo parecido a lo que hace facebook, mostrar lo que esta haciendo la gente. Por eso lo de poner todo en una tabla. Gracias de nuevo por tu aclaracion. Un saludo
  #20 (permalink)  
Antiguo 30/01/2010, 10:28
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: Mostrar el nombre

Cita:
si pongo tablas diferente, tendria que hacer varias consultas y una debajode otra
En realidad no, porque la consulta posiblemente tendría la misma cantidad de JOINS que la que actualmente usas, con la diferencia que en lugar de cruzar varias veces la misma tabla para sacar un dato, cruzarías diferentes tablas para sacar cada dato, con al menos tres ventajas:
1) Usarías menos espacio de disco por ser las tablas más pequeñas, lo que auentaría la performance.
2) No estarías escaneando la tabla más grande cada JOIN por un sólo dato, que tal vez no exista. Esto mejoraría también la performance de la consulta.
3) Se podrían definir índices adicionales con el par de PKs en esas tablas, lo que aumentaría adicionalmente la performance de la consulta, ya que si los datos buscados están en el ídice, MySQL no lee la tabla sino que usa lo que encuentra en el índice.

Es tu decisión, pero a pesar de hacer que el diseño de datos sea más complejo, me parece que la ganancia en cuanto a performance lo justificaría.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #21 (permalink)  
Antiguo 30/01/2010, 10:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Entonces si creara 3 tablas seria mas rapido?.
Es decir mi idea es la siguiente...

Imaginemos que un usuario inserta en la tabla "BESO" un dato a las 20:30 y otro usuario inserta otro dato en la tabla "OREJA" a las 20:31 y despues otro usuario inserta otro dato en la tabla "BESO" a las 20:35 la consulta que haga, primero me imprimiria los datos de la tabla "BESO" y despues los de la tabla "OREJA"
y lo que quiero hacer es que me imprima los datos segun la fecha de entrada del dato, independientemente de la tabla.
No se si he aclarado algo
  #22 (permalink)  
Antiguo 30/01/2010, 11:38
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: Mostrar el nombre

Cita:
Imaginemos que un usuario inserta en la tabla "BESO" un dato a las 20:30 y otro usuario inserta otro dato en la tabla "OREJA" a las 20:31 y despues otro usuario inserta otro dato en la tabla "BESO" a las 20:35 la consulta que haga, primero me imprimiria los datos de la tabla "BESO" y despues los de la tabla "OREJA"
No confundas la relación entre las tablas con el ordenamiento de una consulta.
Las tablas se relacionarían fundamentalmente por los ID de los usuarios involucrados y tendrían, en tu caso, como discriminador el tiempo de ingreso (por lo cual la clave sería de tres campos). Usando solamente las PK obtendrías la relación.
El ordenamiento de la consulta es un tema diferente. Eso dependerá de qué es lo que deseas ordenar y cómo lo indiques, pero nada tiene que ver con la relación de las tablas en sí.
Si quieres, puedes ordenar por remitente, recibidor, fecha; o si quieres por beso y usuario, o bien por beso, oreja, receptor, etc.
Con esto quiero decir que no importa cómo quieras ordenar la tabla devuelta por una consulta, de todos modos la relación entre beso, oreja y usuario será siempre la misma. El resto dependerá de cómo y qué campos pongas en el ORDER BY, no en la definición de las tablas, que es de lo que yo hablaba.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #23 (permalink)  
Antiguo 31/01/2010, 10:40
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Hola GNZSOLOYO, he creado una tabla para cada apartado y he colocado el siguiente codigo
Código PHP:
SELECT gente1.nombre usuaenviagente2.nombre usuarecibegente3.nombre usarioenviaorejagente4.nombre usuariorecibeoreja FROM orejabeso LEFT JOIN gente gente1 ON gente1.id_gente oreja.usuario_envia_oreja LEFT JOIN gente gente2 ON gente2.id_gente oreja.usuario_recibe_oreja LEFT JOIN gente gente3 ON gente3.id_gente beso.usuario_envia_beso LEFT JOIN gente gente4 ON gente4.id_gente beso.usuario_recibe_beso 
Pero ahora no me sale nada, pagina en blanco.
Puede estar mal elcodiho?
Un saludo
  #24 (permalink)  
Antiguo 31/01/2010, 11:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

OK, solucionado, el problema es que la tabla beso estaba vacia
  #25 (permalink)  
Antiguo 31/01/2010, 16:18
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: Mostrar el nombre

THat's the matter: Como ya tienes los datos parcialmente en otra tabla (la que contenía la vieja estructura), ahora tienes que hacer una migración y depuración de datos hacia las nuevas tablas para que las mismas funcionen bien...
Eso es todo.
Es decir: Volcar los besos a la tabla "beso" guardando remitente y receptor en los FK correspondientes, etc., etc.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #26 (permalink)  
Antiguo 01/02/2010, 03:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 675
Antigüedad: 16 años, 2 meses
Puntos: 5
Respuesta: Mostrar el nombre

Ya tengo creadas las 3 tablas, pero me saca datos que no corresponden, ademas que no me las ordena por fecha. este es lo que tengo ahora....
Código PHP:
SELECT gente1.nombre usuaenviagente2.nombre usuarecibegente3.nombre usarioenviaorejagente4.nombre usuariorecibeoreja FROM orejabeso INNER JOIN gente gente1 ON gente1.id_gente oreja.usuario_envia_oreja INNER JOIN gente gente2 ON gente2.id_gente oreja.usuario_recibe_oreja INNER JOIN gente gente3 ON gente3.id_gente beso.usuario_envia_beso INNER JOIN gente gente4 ON gente4.id_gente beso.usuario_recibe_beso 
Pero a la hora de ordenarlos o agruparlos, no se que campo escoger. Y esta es la consulta que imprimo...
Código PHP:
<?php do { ?>
<?php 
if ($totalRows_actividad 0) { // Show if recordset not empty ?>
<p>Tiron de orejas: <?php echo $row_actividad['usarioenviaoreja']; ?><?php echo $row_actividad['usuariorecibeoreja']; ?>
  <p>Beso: <?php echo $row_actividad['usuaenvia']; ?>
    : <?php echo $row_actividad['usuarecibe']; ?>
    <?php // Show if recordset not empty ?>
<?php 
} while ($row_actividad mysql_fetch_assoc($actividad)); ?>
En la tabla oreja, tengo 3 lineas y en la beso 1 linea, cuando me hace la consulta, en vez de dejarme la linea de beso vacia, me repite el mismo dato hata que acaba de imprimir la tabla oreja, que son 3 lineas.

Etiquetas: nombre
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 08:22.