Foros del Web » Programando para Internet » PHP »

Problemas al mostrar los resultados de un join con mysql

Estas en el tema de Problemas al mostrar los resultados de un join con mysql en el foro de PHP en Foros del Web. Buenas Tengo un problema usando un JOIN para entrelazar las dos tablas siguientes: Usuarios id nombre apellidos provincia Provincias id nombre En php, tengo el ...
  #1 (permalink)  
Antiguo 15/09/2009, 11:46
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 4 meses
Puntos: 1
Problemas al mostrar los resultados de un join con mysql

Buenas

Tengo un problema usando un JOIN para entrelazar las dos tablas siguientes:

Usuarios
id
nombre
apellidos
provincia

Provincias
id
nombre

En php, tengo el siguiente programa, que recibe una variable por post, y busca en la base de datos los campos que coincidan. Lo que quiero es que, al mostrar los resultados, pueda mostrar el nombre de la provincia sin tener que hacer una nueva llamada a la base de datos para buscar el nombre de la provincia:
Código PHP:
$nombre $_POST['nombre']
$query "SELECT * FROM usuarios JOIN provincias ON usuarios.provincia=provincias.id WHERE usuarios.nombre=$nombre";
$resultados mysql_query($query,$link);
while (
$resultado mysl_fetch_array($resultados)){
echo 
$resultado['nombre']." ".$resultado['apellidos']." ".$resultado['provincias.nombre'];

Obviando los posibles errores de compilacion, ya que estoy escribiendo el codigo de memoria, el error que me produce el programa es que provincias.nombre no está definido, y despues de un rato dandole vueltas, no consigo averiguar dónde esta el problema.

¿Alguna idea?

Saludos a todos
  #2 (permalink)  
Antiguo 15/09/2009, 13:21
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas al mostrar los resultados de un join con mysql

Nunca aprendi a usar JOIN, tal vez porque me gusta mas en esta otra forma:

Cita:
SELECT u.*, p.nombre as pnombre FROM usuarios u, provincias p WHERE u.nombre = '$nombre' AND p.id = u.provincia

El nombre de la provincia quedara en: $resultado['pnombre']
Digamos que se compone mas o menos asi:

SELECT:
---------------------------------------------------
alias_de_tabla.nombre_de_campo (* para leerlos todos) (u.*)
alias_de_tabla.nombre_de_campo as alias_de_campo_en_resultado (p.nombre as pnombre)

FROM:
--------------------------------------------------
nombre_de_tabla alias_de_tabla (ambos separados por un espacio) usuarios u

WHERE con filtro normal:
-------------------------------------------------
alias_de_tabla.campo = 'valor'

La parte que sustituye al JOIN queda en WHERE:
------------------------------------------------
AND alias_tabla1.campo = alias_tabla2.campo ( AND p.id = u.provincia )
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 15/09/2009, 13:31
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: Problemas al mostrar los resultados de un join con mysql

Es mejor usar JOIN por cuestiones de rendimiento y dejar el WHERE para filtrar el resultado de la unión de las tablas.

Pero la forma que expusiste es igualmente válida usando JOIN (agregar un alias y usarlo para obtener los datos)

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 15/09/2009, 14:12
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Problemas al mostrar los resultados de un join con mysql

Lo he hecho de la manera que comenta Triby y va bien, sin embargo me gustaria usar JOIN en la medida de lo posible, ya que he visto por ahí varios ejemplos parecidos que en teoria funcionaban.

Última edición por jemarquesini; 15/09/2009 a las 14:20
  #5 (permalink)  
Antiguo 15/09/2009, 14:16
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problemas al mostrar los resultados de un join con mysql

El alias solo es en la consulta SQL, al rescatar el campo en PHP usa solo el nombre que le diste sin el identificador.

Saludos.
  #6 (permalink)  
Antiguo 15/09/2009, 14:16
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: Problemas al mostrar los resultados de un join con mysql

A lo que yo me refería era a algo como esto:
Código MySQL:
Ver original
  1.     p.nombre pnombre
  2.     usuarios u
  3.     provincias p
  4.     u.provincia = p.id
  5.     u.nombre=$nombre
Y recuperes el dato como $resultado['pnombre']
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.

Última edición por David; 17/09/2009 a las 09:09 Razón: Corrección
  #7 (permalink)  
Antiguo 15/09/2009, 14:29
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 4 meses
Puntos: 1
Respuesta: Problemas al mostrar los resultados de un join con mysql

Disculpad mi indigencia intelectual, pero es que se me está haciendo un nudo en el cerebro.

Cita:
Iniciado por GatorV Ver Mensaje
El alias solo es en la consulta SQL, al rescatar el campo en PHP usa solo el nombre que le diste sin el identificador.
¿Quiere eso decir que debo usar $resultado['nombre´]? En ese caso, ¿no daria un problema al existir un campo 'nombre' en cada tabla?

Cita:
Iniciado por David Ver Mensaje
A lo que yo me refería era a algo como esto:
Código MySQL:
Ver original
  1.     p.nombre pnombre
  2.     usuarios u
  3.     provincias p
  4.     u.provincia = p.id
  5.     usuarios.nombre=$nombre
Y recuperes el dato como $resultado['pnombre']
¿No daria error si p.nombre no es un campo de la tabla desde la que recojemos los datos?
  #8 (permalink)  
Antiguo 15/09/2009, 14:30
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Respuesta: Problemas al mostrar los resultados de un join con mysql

Exacto por eso en tu clausula SQL especifica los campos que son, lo que sean "iguales" dales un alias (usando AS) y los recojes en PHP usando el alias.

Saludos.
  #9 (permalink)  
Antiguo 15/09/2009, 14:32
 
Fecha de Ingreso: agosto-2009
Ubicación: Jalisco,Mexico
Mensajes: 28
Antigüedad: 14 años, 7 meses
Puntos: 2
Respuesta: Problemas al mostrar los resultados de un join con mysql

de casualidad haz intentado imprimir tu consulta y probarla en un administrador de bases de datos como phpmyadmin? asi sabras si la consuta que se esta generando esta bien o si le falta algo.

por lo que veo en tu codigo inicial tal vez y solo tal vez le falte agregar comillas a la variable $nombre ya que es alfanumerica

"SELECT * FROM usuarios JOIN provincias ON usuarios.provincia=provincias.id WHERE usuarios.nombre='$nombre' "

y si lo que estas haciendo son busquedas tal vez sea recomendable usar 'like'

ejemplo:
"SELECT * FROM usuarios JOIN provincias ON usuarios.provincia=provincias.id WHERE usuarios.nombre LIKE '% $nombre%' "
  #10 (permalink)  
Antiguo 15/09/2009, 14:33
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 17 años, 4 meses
Puntos: 1
Cita:
Iniciado por David Ver Mensaje
A lo que yo me refería era a algo como esto:
Código MySQL:
Ver original
  1.     p.nombre pnombre
  2.     usuarios u
  3.     provincias p
  4.     u.provincia = p.id
  5.     usuarios.nombre=$nombre
Y recuperes el dato como $resultado['pnombre']
Finalmente he hecho lo que debia haber hecho antes, que es probarlo, en vez de seguir dando vueltas

Funciona correctamente. Anteriormente intenté hacer algo parecido, pero me daba error, y es lo siguiente:
Código PHP:
SELECT u.*, p.nombre pnombre FROM usuarios uprovincias p JOIN provincias ON u.provincia p.id WHERE usuarios.nombre=$nombre 
Esto daba error, supongo que porque en el FROM estaba incluyendo tambien la tabla provincias, que es lo que en tu ejemplo no has incluido. No obstante, no entiendo por qué eso da error, pero funcionar, funciona.

Gracias !!

Cita:
Iniciado por chmar Ver Mensaje
de casualidad haz intentado imprimir tu consulta y probarla en un administrador de bases de datos como phpmyadmin? asi sabras si la consuta que se esta generando esta bien o si le falta algo.

por lo que veo en tu codigo inicial tal vez y solo tal vez le falte agregar comillas a la variable $nombre ya que es alfanumerica

"SELECT * FROM usuarios JOIN provincias ON usuarios.provincia=provincias.id WHERE usuarios.nombre='$nombre' "

y si lo que estas haciendo son busquedas tal vez sea recomendable usar 'like'

ejemplo:
"SELECT * FROM usuarios JOIN provincias ON usuarios.provincia=provincias.id WHERE usuarios.nombre LIKE '% $nombre%' "
Efectivamente, en mi codigo uso LIKE, pero era para resumirlo un poco. En cuanto a lo de las comillas funciona bien sin ellas. Lo que sí que no he intentado es probarlo en phpmyadmin, aunque ya funciona bien. No obstante, lo tendré en cuenta para la siguiente

Última edición por GatorV; 15/09/2009 a las 14:43
  #11 (permalink)  
Antiguo 15/09/2009, 15:13
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Problemas al mostrar los resultados de un join con mysql

David, excelente!!! ...creo que acabo de entender por fin como usar JOIN + alias y voy a probarlo; es un poco mas de codigo, pero mejor estructurado y seguramente me evitara muchos dolores buscando obtener los resultados deseados, ademas de optimizar las consultas.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 16/09/2009, 00:41
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Problemas al mostrar los resultados de un join con mysql

@David, pregunto en la consulta que diferencia hace usar el alias de la tabla en el where y escribir el nombre completo de la tabla me refiero
Código mysql:
Ver original
  1.     usuarios.nombre=$nombre
En vez de
Código mysql:
Ver original
  1.     u.nombre=$nombre
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #13 (permalink)  
Antiguo 17/09/2009, 09:07
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: Problemas al mostrar los resultados de un join con mysql

En realidad fue un error al escribir, usar el nombre completo provocará un error, debe usarse el alias.

Saludos.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
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 23:49.