Foros del Web » Programando para Internet » PHP »

Unir tres tablas

Estas en el tema de Unir tres tablas en el foro de PHP en Foros del Web. Buenas, Tengo tres tablas ( cpu, monitores y impresoras ) y queria unirlas para mostrar todos los resultados juntos. Estuve mirando por internet y se ...
  #1 (permalink)  
Antiguo 08/04/2011, 02:19
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Unir tres tablas

Buenas,

Tengo tres tablas ( cpu, monitores y impresoras ) y queria unirlas para mostrar todos los resultados juntos. Estuve mirando por internet y se hace mediante el JOIN, pero no logo entender como hacerlo segun mi codigo.

yo tenia hechas las consultas por separado.

Código PHP:
Ver original
  1. //tabla cpu
  2.  
  3. //Seleccionamos la tabla equipos
  4. $stb = "SELECT * FROM cpu";
  5.        
  6. //Ejecutamos la sentencia anterior
  7. $resultado = mysql_query($stb, $con) or die ("error con la consulta");
  8.  
  9. //contamos cuantos registros hay
  10. $totalr = mysql_num_rows($resultado);
  11.  
  12. $total_registro= $totalr ;
  13.  
  14. //le asignamos el total de registro a $i restandole 1
  15. $i = $total_registro-1;
  16. $registro['Numeros'] = $i;
  17. //guardamos en la variable contenido una raiz con todos los datos
  18.  
  19.        
  20. for($j=0; $j<=$i; $j++){
  21.        
  22. while($contenido = mysql_fetch_assoc($resultado)){
  23.  
  24. $registro['Numeros'] = $j;
  25.        
  26. $datos2['etiqueta'][$registro['Numeros']] = $contenido['Etiqueta'];
  27. $datos2['ip'][$registro['Numeros']] = $contenido['Ip'];
  28. $datos2['tipo'][$registro['Numeros']] = $contenido['Tipo'];
  29. $datos2['marca'][$registro['Numeros']] = $contenido['Modelo'];
  30. $datos2['modelo'][$registro['Numeros']] = $contenido['Marca'];
  31. $datos2['ubicacion'][$registro['Numeros']] = $contenido['Ubicacion'];
  32. $datos2['departamento'][$registro['Numeros']] = $contenido['Departamento'];
  33. $datos2['registro']  = $registro['Numeros'];
  34.  
  35. $j++;
  36. }
  37. }
  38.  
  39. if (isset($datos2['etiqueta'][$registro['Numeros']])){
  40. print json_encode($datos2);
  41. }else{
  42. $datos2 = "no existe";
  43. print json_encode($datos2);
  44. }

lo mismo hago con monitor e impresora pero monitor no tiene el campo ('ip').estos datos hace un print alfinal segun el tipo impresora, monito... y vuelca los datos mediante ajax usando json.

lo que me interesa ahora es hacer un boton que le de a todos y me muestre por pantalla todos los resultados de las tres tablas.

yo creo que tendria que ser de la siguiente manera.

Código PHP:
Ver original
  1. //Seleccionamos la tabla equipos
  2. $stb = "SELECT * FROM cpu JOIN impresoras";


pero al hacer un print me muestra solo el contenido de la ultima tabla. igual el problema este en el bucle while a la hora de recoger los datos.


Saludos
  #2 (permalink)  
Antiguo 08/04/2011, 06:02
Avatar de luis010182  
Fecha de Ingreso: julio-2009
Ubicación: Argentina - Capital Federal
Mensajes: 382
Antigüedad: 14 años, 9 meses
Puntos: 27
Respuesta: Unir tres tablas

el join te sirve para emparejar registros
por ejemplo si vos tenes las tablas productos y categorias, el la tabla categoria tenes el id categoria y el nombre, y el la tabla producto vos tenes solo el campo id_categoria, en este caso vos podes hacer un join para saber el nombre de la categoria que corresponde cada producto.

select * from productos as p inner join categorias as c ON c.id_categoria=p.id_categoria

Pero lo que vos necesitas me parece que es el UNION, lo que hace el union es unir tablas o consultas con la misma cantidad de CAMPOS

select descripcionCPU as descripcion, id_cpu from cpu
union
select descripcion_impresora as descripcion, id_impresora from impresoras
union
select .....

igual fijate cual es la opcion que mas te sirve
  #3 (permalink)  
Antiguo 11/04/2011, 03:59
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Unir tres tablas

Cita:
Iniciado por luis010182 Ver Mensaje
el join te sirve para emparejar registros
por ejemplo si vos tenes las tablas productos y categorias, el la tabla categoria tenes el id categoria y el nombre, y el la tabla producto vos tenes solo el campo id_categoria, en este caso vos podes hacer un join para saber el nombre de la categoria que corresponde cada producto.

select * from productos as p inner join categorias as c ON c.id_categoria=p.id_categoria

Pero lo que vos necesitas me parece que es el UNION, lo que hace el union es unir tablas o consultas con la misma cantidad de CAMPOS

select descripcionCPU as descripcion, id_cpu from cpu
union
select descripcion_impresora as descripcion, id_impresora from impresoras
union
select .....

igual fijate cual es la opcion que mas te sirve

Buenas,

según lo que me dijiste del unión busque por internet y tenias razón. El problema que me da un error de cónsula.
Código PHP:
Ver original
  1. $stb = "(SELECT * FROM cpu WHERE Estado = '$estado') UNION ALL (SELECT * FROM impresoras WHERE Estado = '$estado')";
  2. //Ejecutamos la sentencia anterior
  3. $resultado = mysql_query($stb, $con) or die ("error con la consultas");

Saludos
  #4 (permalink)  
Antiguo 11/04/2011, 04:05
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años
Puntos: 26
Respuesta: Unir tres tablas

Mira este link para ver mejor como utilizar el union all junto con join: http://ariel.esdebian.org/27200/sql-join-basico
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
  #5 (permalink)  
Antiguo 11/04/2011, 04:08
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Unir tres tablas

Cita:
Iniciado por Blashak Ver Mensaje
Buenas,

según lo que me dijiste del unión busque por internet y tenias razón. El problema que me da un error de cónsula.
Código PHP:
Ver original
  1. $stb = "(SELECT * FROM cpu WHERE Estado = '$estado') UNION ALL (SELECT * FROM impresoras WHERE Estado = '$estado')";
  2. //Ejecutamos la sentencia anterior
  3. $resultado = mysql_query($stb, $con) or die ("error con la consultas");

Saludos
Vale, ya está. El error era debido a que una tabla contenía mas columnas que otra. seleccione los campos que quería y listo.
Ahora cuando hago un print solo me muestra los campos de cpu los de impresora no. alguien sabe porq?
Código PHP:
Ver original
  1. $stb = "(SELECT Etiqueta FROM impresoras WHERE Estado = '$estado') UNION ALL (SELECT Etiqueta FROM monitores WHERE Estado = '$estado')";
  2.         //Ejecutamos la sentencia anterior
  3.         $resultado = mysql_query($stb, $con) or die (mysql_error());
  4.  
  5.        
  6.         //contamos cuantos registros hay
  7.         $totalr = mysql_num_rows($resultado);
  8.  
  9.         //guardamos en la variable contenido una raiz con todos los datos
  10.  
  11.        
  12.        
  13.        
  14.         while($contenido = mysql_fetch_assoc($resultado)){
  15.  
  16.  
  17.         print_r($contenido);
  18.  
  19.         $j++;
  20.  
  21.         }
  #6 (permalink)  
Antiguo 11/04/2011, 04:28
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años
Puntos: 26
Respuesta: Unir tres tablas

Del link que te pase hay una consulta muy similar a la tuya. Modificala y tendras lo que buscas:

select nombre, telefono, accion, cantidad from clientes left join acciones on clientes.cid=acciones.cid where accion is null union select nombre, telefono, accion, cantidad from clientes right join acciones on clientes.cid=acciones.cid where nombre is null;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose | 111 | NULL | NULL |
| manuel | 333 | NULL | NULL |
| NULL | NULL | FORD | 100 |
+--------+----------+--------+----------+
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.
  #7 (permalink)  
Antiguo 11/04/2011, 04:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 471
Antigüedad: 16 años, 5 meses
Puntos: 2
Respuesta: Unir tres tablas

Cita:
Iniciado por Vallu Ver Mensaje
Del link que te pase hay una consulta muy similar a la tuya. Modificala y tendras lo que buscas:

select nombre, telefono, accion, cantidad from clientes left join acciones on clientes.cid=acciones.cid where accion is null union select nombre, telefono, accion, cantidad from clientes right join acciones on clientes.cid=acciones.cid where nombre is null;
+--------+----------+--------+----------+
| nombre | telefono | accion | cantidad |
+--------+----------+--------+----------+
| jose | 111 | NULL | NULL |
| manuel | 333 | NULL | NULL |
| NULL | NULL | FORD | 100 |
+--------+----------+--------+----------+
Buenas el link que me pasaste lo lei pero es diferente a lo mio o eso pienso:D.
el problema mio que muestro la info en arrays seperado, uno para cada tabla. lo que yo quiero es juntarlo todo en un array para depsues pasarlo median ajax y mostarlo en web.
  #8 (permalink)  
Antiguo 11/04/2011, 05:22
 
Fecha de Ingreso: marzo-2010
Ubicación: Barcelona
Mensajes: 657
Antigüedad: 14 años
Puntos: 26
Respuesta: Unir tres tablas

Pues sinceramente no veo error en tu sql: $stb = "(SELECT Etiqueta FROM impresoras WHERE Estado = '$estado') UNION ALL (SELECT Etiqueta FROM monitores WHERE Estado = '$estado')";

Es posible que el campo no se idéntico?
__________________
Siempre fallaras el 100% de los tiros que no te atrevas a lanzar.
El 98% de los adolescentes han fumado, si eres del dichoso 2% que no lo ha hecho, copia y pega esto en tu firma.

Etiquetas: tablas, tres
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 05:00.