#1•• 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. |
#2• Tienes el codigo a mano?. Te da algun tipo de error?. Saludos. |
#3• 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. |
#4• Si , si que se puede. De todas formas si te surgieran errores o dudas, pues postealas y veremos a ver donde falla. Saludos. |
#5• Muchas gracias por tu disposicion a ayudar. Voy a empezar a trabajar para ver que tal resulta. Gracias otra vez. |
#6•• 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' |
#7• Se te ha colado una u despues del primer join Código: INNER JOIN alumno_user u Ahi te esta marcando error. |
#8• 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)) } 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 |
#9• 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. |
#10• No capte muy bien el ultimo ejemplo |
#11•• 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. |
#12• Ya lo arreglé, mira:
|
#13• Y al final como has arreglado lo del bucle?. Porque solo veo hasta el ORDER BY, linea 34 :S. Saludos. |
#14• Le agrego un ALIAS al campo y a la tabla: En el SELECT: u.user_id, ul.username username_u En el INNER JOIN INNER JOIN INNER JOIN Y en el bucle, lo llamo con $array['username_u'] a diferencia del otro donde solo era $array['username'] |
#15• 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 |