Foros del Web » Programando para Internet » PHP »

ayuda inner join

Estas en el tema de ayuda inner join en el foro de PHP en Foros del Web. Hola a todos. Estoy tratando de obtener resultados de dos tablas usando el comando inner join, las tablas son como las siguientes: mysql> describe foro; ...
  #1 (permalink)  
Antiguo 15/07/2005, 22:32
 
Fecha de Ingreso: julio-2005
Mensajes: 1
Antigüedad: 12 años, 5 meses
Puntos: 0
ayuda inner join

Hola a todos.
Estoy tratando de obtener resultados de dos tablas usando el comando inner join, las tablas son como las siguientes:

mysql> describe foro;
+---------------+------------------+------+-----+---------------------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+------------------+------+-----+---------------------+----------------+
| id | int(7) | | MUL | NULL | auto_increment |
| autor | varchar(200) | | | | |
| titulo | varchar(200) | | | | |
| mensaje | text | | | | |
| fecha | datetime | | | 0000-00-00 00:00:00 | |
| respuestas | int(11) | | | 0 | |
| identificador | int(7) | | | 0 | |
| ult_respuesta | datetime | YES | | NULL | |
| id_cat | int(11) | | | 1 | |
| id_usuario | int(10) unsigned | YES | | NULL | |
+---------------+------------------+------+-----+---------------------+----------------+
10 rows in set (0.00 sec)

mysql>

La otra tabla involucrada:

mysql> describe usuarios;
+------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+----------------+
| id_usuario | int(11) | | PRI | NULL | auto_increment |
| autor | varchar(100) | | | | |
| password | varchar(32) | YES | | | |
| avatar | varchar(200) | YES | | NULL | |
+------------+--------------+------+-----+---------+----------------+
4 rows in set (0.00 sec)

mysql>

Ahora bien, mi idea es obtener datos de ambas tablas para lo cual estoy utilizando la siguiente consulta a la base de datos que me parece que no esta muy bien:

"SELECT f.mensaje, f.id, f.autor, f.titulo, f.id_cat, f.id_usuario,
DATE_FORMAT(f.fecha, '%d/%m/%Y %H:%i:%s') FROM foro as f
INNER JOIN usuarios as u ON u.id_usuario=f.id_usuario
WHERE f.id='$id' OR f.identificador='$id' AND f.id_cat='$id_cat' ORDER BY fecha ASC";

Las variables como $id llegan hasta esta pagina por get desde otras partes del codigo.
Esta consulta creo que funciona bien con los campos que debe obtener desde la tabla foro en los usuarios que no tiene avatar, con los que tiene avatar nada aparece.
Necesito obtener los datos que ahi les muestro de la tabla foro + el avatar de la tabla usuarios para despues hacer algo como lo siguiente:

$respuesta = mysql_query($sql, $conectar) or die("Pasa esto: ".mysql_error());
...
mysql_num_rows($respuesta);
...
$fila = mysql_fetch_assoc($respuesta)
...
$fila["avatar"] = $avatar;

Obteniendo asi una variable a la cual poder llamar desde otras partes para que me imprima el avatar de cada usuario.

Hace poco que estoy con esto de php y trato de solucionar los problemas yo mismo pero esta vez ya no pude y trate de obtener un poco de ayuda.

Desde ya les agradesco a todos por cualquier idea y si necesitan mas datos solo haganmelo saber.

Un saludo para todos.
  #2 (permalink)  
Antiguo 16/07/2005, 02:42
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 14 años, 4 meses
Puntos: 0
Si necesitas seleccionar el avatar entre los campos a seleccionar deberías ponerlo también:

"SELECT f.mensaje, f.id, f.autor, f.titulo, f.id_cat, f.id_usuario, u.avatar...

En principio si siempre van ha estar informadas ambas tablas no veo mayor problema, si, por ejemplo, en la tabla usuarios pudiera no haber correspondencia cuando haces u.id_usuario=f.id_usuario entonces prueba con un LEFT JOIN o un RIGHT JOIN en vez de un INNER JOIN

Prueba a usar paréntesis en el where para dejar las cosas bien claras:

WHERE (f.id='$id' OR f.identificador='$id') AND f.id_cat='$id_cat'
ORDER BY fecha ASC

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)
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 16:25.