Foros del Web » Programando para Internet » PHP »

Join con mysql

Estas en el tema de Join con mysql en el foro de PHP en Foros del Web. Estoy intentando unir tres o mas tablas Estas son las tablas: -temas -respuestas -usuarios en temas tengo id_user en respuestas tambien tengo un id_user y ...
  #1 (permalink)  
Antiguo 14/01/2008, 22:22
 
Fecha de Ingreso: enero-2008
Ubicación: en Punta Arenas
Mensajes: 47
Antigüedad: 16 años, 3 meses
Puntos: 0
Join con mysql

Estoy intentando unir tres o mas tablas
Estas son las tablas:
-temas
-respuestas
-usuarios

en temas tengo id_user en respuestas tambien tengo un id_user
y en usuarios tambien
lo que quiero hacer es unir segun un tema las tablas

onda:

en la consulta selecciono todos los campos del tema (donde id_tema = 1)
unido a usuarios (con id_user = al id_user que contenga id_tema)
y unido a respuestas( lo mismo, id_tema = al id_tema)
todo eso hacerlo en una sola consulta??'

Estube intentando algo como esto:

Código PHP:
$consulta "SELECT * FROM temas 
JOIN usuarios ON temas.id_user = usuarios.id_user
JOIN respuestas ON temas.id_user = respuestas.id_user WHERE id_tema=1 "
;
$result mysql_query($consulta,$link);
while(
$row=mysql_fetch_array($result)){
Aki pongo los datos ondatitulo_temacreadordatos del creadoretc...

Lo de arriba no me funciona, si le sac en WHERE id_tema=1 me muestra
muchos datos pero duplicados
al rededor del uno le puse comillas simples '1' y tampoco funciona
nose como se hace la cution :|
  #2 (permalink)  
Antiguo 14/01/2008, 22:33
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Re: Join con mysql

Intenta siguiendo este patron ... eso es un Join tambien....

Código PHP:
SELECT clientes.nombre AS nombre_cliente
               
localidades.nombre_localidad AS localidad_cliente
               
tipos_cliente.tipo AS tipo_cliente
        FROM clientes
localidadestipos_cliente
        WHERE clientes
.localidad localidades.id
        
AND clientes.tipo_cliente tipos_cliente.id
        LIMIT 0 
30
  #3 (permalink)  
Antiguo 14/01/2008, 22:43
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Join con mysql

Es complicado asi.
Yo haría una sola tabla... supongamos que se llame post.
En esa tabla le agregas un campo que se llame "parentid".

En el caso que sea un tema nuevo en el parentid le agregas 0.
Si son respuestas entonces le agregas en parentid el id del tema que se responde (el de arriba).

Entonces haces una sola consulta:

Código PHP:
$tema 1;
$consulta "SELECT p.* FROM post As p
             INNER JOIN usuarios As u ON p.id_user=u.id
             WHERE (p.id ='"
.$tema."' || p.parentid = '".$tema."')
             ORDER BY p.id"

Luego al hacer el while ya sabes que la primera vuelta es el tema y que las siguientes son respuestas.

Si quieres consultar sólo los temas entonces la sentencia sería algo así:

Código PHP:
$consulta "SELECT p.* FROM post As p
             INNER JOIN usuarios As u ON p.id_user=u.id
             WHERE p.parentid = '0'
             ORDER BY p.id"




De la otra forma claro que se van a repetir datos, específicamente el del tema ya que estas uniendo dos tablas, en una tienes una sola entrada y el la otra puedes tener muchas.

Bueno, es una idea que se me ocurrió al leer tu consulta y espero que te oriente.

Saludos

  #4 (permalink)  
Antiguo 14/01/2008, 22:49
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 5 meses
Puntos: 25
Re: Join con mysql

en mi opinión tengo la información mas organizada y relacionada entre números o ID's....
  #5 (permalink)  
Antiguo 15/01/2008, 01:30
 
Fecha de Ingreso: enero-2008
Mensajes: 27
Antigüedad: 16 años, 3 meses
Puntos: 0
Re: Join con mysql

Utiliza DISTINCT con INNER JOIN:

SELECT DISTINCT id_user,campo2,campo3,campoN from temas INNER JOIN usuario ON ...

Eso deberia eliminar los duplicados.

Y para eddwinpaz... Eso no es un JOIN es un Producto Cartesiano con clausulas de disercion y es mucho mas lento que un JOIN. Y no hay que confundir mezclar con unir.
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 02:48.