Overlick
Usuario habitual
Usuario habitual

Hola!

Esta ves intento hacer un foro, pero me ha surgido una duda. Suponiendo que tengo estas tablas:

TABLA TOPICO, ID_TOPICO, ID_USUARIO, TITULO_TOPICO, CONTENIDO, RESPUESTAS, ID_USUARIO_ULTIMO_POST

TABLA POST, ID_POST, ID_TOPICO, TITULO ETC

TABLA USUARIO, ID_USUARIO, NOMBRE_USARIO, ETC

Cuando en el index de un foro, intento mostrar todos los topicos publicados, hago un JOIN entre el ID_USUARIO de la tabla TOPICO y la tabla USUARIO para asi mostrar al creador del topico. Pero tambien quiero mostrar al creador del ultimo post en el topico y necesitaria hacer otro JOIN entre ID_USUARIO_ULTIMO_POST de la tabla TOPICO y ID_USUARIO de la tabla USUARIO. Mi duda es ¿Puedo hacer 2 Join entre 2 tablas?. ¿O mi sistema de bd esta mal?

Queria saber antes de comenzar a programar cosas y despues darme cuenta que no funciona

Ojala puedan ayudarme, de antemano muchas gracias.

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Tienes el codigo a mano?. Te da algun tipo de error?.

Saludos.

Overlick
Usuario habitual
Usuario habitual

No, aun no lo hago... Y por eso mismo pregunto... Pues esta forma (haciendo 2 JOINS de las mismas tablas) es unica que se me ocurre para mostrar el creador del ultimo post en cada topico.

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Si , si que se puede. De todas formas si te surgieran errores o dudas, pues postealas y veremos a ver donde falla.

Saludos.

Overlick
Usuario habitual
Usuario habitual

Muchas gracias por tu disposicion a ayudar. Voy a empezar a trabajar para ver que tal resulta. Gracias otra vez.

Overlick
Usuario habitual
Usuario habitual

Mira, ya me ha surgido una duda, esta es la consulta:

SELECT T.ID_TOPICO, T.ID_FORO, T.ID_USUARIO, T.TITULO, T.CONTENIDO, T.FECHA, T.STICK, T.VISITA, T.RESPUESTAS, T.ID_USUARIO_ULTIMO_POST, u.user_id, u.username, P.ID_USUARIO FROM TOPICO T INNER JOIN alumno_users u ON T.ID_USUARIO = u.user_id LEFT JOIN POST P ON T.ID_TOPICO = P.ID_TOPICO INNER JOIN alumno_users u ON T.ID_USUARIO_ULTIMO_POST = u.user_id WHERE T.ID_FORO = $id_foro GROUP BY T.ID_TOPICO

Y da error cuando aplico la consulta en mysql_fetch_array.

Dice esto:

#1066 - Not unique table/alias: 'u'

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Se te ha colado una u despues del primer join

Código:
INNER JOIN alumno_user u

Ahi te esta marcando error.

Overlick
Usuario habitual
Usuario habitual

No no, es así, es el 'alias' para llamar a las filas que vienen de la tabla usuarios.

Pero mira, ya lo he estado viendo toda la tarde y ya tengo una consulta que no da error:

SELECT T.ID_TOPICO, T.ID_FORO, T.ID_USUARIO, T.TITULO, T.CONTENIDO, T.FECHA, T.STICK, T.VISITA, T.ID_USUARIO_ULTIMO_POST, T.FECHA_ULTIMO_POST, T.RESPUESTAS, u.user_id, u.username, P.ID_USUARIO FROM TOPICO T INNER JOIN alumno_users u ON T.ID_USUARIO = u.user_id LEFT JOIN POST P ON T.ID_TOPICO = P.ID_TOPICO INNER JOIN alumno_users u ON T.ID_USUARIO_ULTIMO_POST = u.user_id WHERE T.ID_FORO = $id_foro GROUP BY T.ID_TOPICO ORDER BY T.FECHA_ULTIMO_POST DESC

Ahora, como ves, tengo los 2 JOINS con la tabla de los usuarios. Para mostrar el nombre del creador del topico lo llamo así:

while($prox = mysql_fetch_array($resultados))
{
    $nombre = $prox['username'];

}

Pero ahora. Como diferencio el $prox['username'] del Join del creador del topico, del $prox['username'] que viene del vreador del ultimo post en el topico.

¿Se entiende?...

De antemano muchas gracias

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Cierto. No habia caido al verlo asi.

Pues utiliza un alias tambien para el campo de la tabla que quieras y no liarte. Siempre en la sentencia SELECT: SELECT  t1.a AS  TOTAL.

Y cuando lo llames:

Código:
 $prox["TOTAL"];
 $prox["username"];...

Pruebalo porque no estoy muy fresco de joins que digamos :). Si encuentro el ejemplo que tenia te lo detallare mejor.

Overlick
Usuario habitual
Usuario habitual

No capte muy bien el ultimo ejemplo :}

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

A ver, te pongo el ejemplo que cree yo. Necesitaba sacar el numero total de categorias de mi pagina.

Código:
$ssql="SELECT noticias.*,COUNT(categorias.tipoCategoria) AS TOTAL FROM noticias LEFT JOIN categorias ON noticias.tipoCategoria=categorias.tipoCategoria GROUP BY tipoCategoria";

Por eso utilize un ALIAS que es el TOTAL y cuando recorria el bucle :

Código:
while($array =mysql_fetch_array($sqlexe))
        { 
         //$idNoticia=$array["idNoticia"];
          
         echo "<a href='index.php?tipoCategoria=".$array['tipoCategoria']."'>.$array['tipoCategoria']."(".$array['TOTAL'].")"."</a>";   
       }

Tu tienes que sacar los dos campos que tienes iguales y uno de ellos que tenga un alias para diferenciarlo. Y cuando recorres el bucle , lo sacas con el alias. En mi ejemplo :

$array["TOTAL"]. En tu ejemplo , pues que sea algo del tipo $variable["ultimo_usuario"] o algo asi.

Se me entiende, no?. Saludos.

Overlick
Usuario habitual
Usuario habitual

Ya lo arreglé, mira:

  1. SELECT
  2.     T.ID_TOPICO,
  3.     T.ID_FORO,
  4.     T.ID_USUARIO,
  5.     T.TITULO,
  6.     T.CONTENIDO,
  7.     T.FECHA,
  8.     T.STICK,
  9.     T.VISITA,
  10.     T.ID_USUARIO_ULTIMO_POST,
  11.     T.FECHA_ULTIMO_POST,
  12.     T.RESPUESTAS,
  13.     u.user_id,
  14.     u.username,
  15.     P.ID_USUARIO,
  16.     ul.username username_u
  17. FROM
  18.     TOPICO T
  19. INNERJOIN
  20.     alumno_users u
  21.     ON
  22.         T.ID_USUARIO = u.user_id
  23.  INNERJOIN
  24.     alumno_users ul
  25.     ON
  26.         T.ID_USUARIO_ULTIMO_POST = ul.user_id
  27. LEFTJOIN
  28.     POST P
  29.     ON
  30.         T.ID_TOPICO = P.ID_TOPICO
  31. WHERE
  32.     T.ID_FORO = $id_foro
  33. GROUPBY T.ID_TOPICO
  34. ORDERBY T.FECHA_ULTIMO_POST DESC
Muchas gracias Sr :D
Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Y al final como has arreglado lo del bucle?. Porque solo veo hasta el ORDER BY, linea 34 :S.

Saludos.

Overlick
Usuario habitual
Usuario habitual

Le agrego un ALIAS al campo y a la tabla:

En el SELECT:

u.user_id,
u.username,

ul.username username_u

En el INNER JOIN 

INNER JOIN
alumno_users u
ON
T.ID_USUARIO = u.user_id

INNER JOIN
alumno_users ul
ON
T.ID_USUARIO_ULTIMO_POST = ul.user_id

Y en el bucle, lo llamo con $array['username_u'] a diferencia del otro donde solo era $array['username']

Avatar Image
Come y duerme en el foro
Come y duerme en el foro

Perfecto. Solucionado el problema entonces. Saludos!.

ATENCIÓN: Este tema no tiene actividad desde hace más de 6 MESES,
te recomendamos abrir un nuevo tema en lugar de responder al actual
Opciones:
Ir al subforo:
Permisos:
TU NO PUEDES Escribir nuevos temas
TU NO PUEDES Responder a los temas
TU NO PUEDES Editar tus propios mensajes
TU NO PUEDES Borrar tus propios mensajes
Temas similares
No se han encontrado temas similares