Foros del Web » Programando para Internet » PHP »

Unir Consultas

Estas en el tema de Unir Consultas en el foro de PHP en Foros del Web. Hola alguien me prodria decir que estoy haciendo mal? Código PHP: $listado_productos =   mysql_query ( "select * from producto_productos where IDProducto_Catalogo=" . $reg [ 'IDProducto_Catalogo' ]. "  UNION SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto  where producto_xtras.IDProducto_Catalogo = '"  .  ...
  #1 (permalink)  
Antiguo 19/02/2014, 13:22
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Unir Consultas

Hola alguien me prodria decir que estoy haciendo mal?

Código PHP:
$listado_productos=  mysql_query("select * from producto_productos where IDProducto_Catalogo=".$reg['IDProducto_Catalogo'].
UNION SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$reg['IDProducto_Catalogo'] . "' ",$db); 
ambas consultas funcionan por separado, pero al intentar unirlas me da un error

Código HTML:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\desarrollo2014\site\catalogo.php on line 72
Linea 72
Código PHP:
while($reg2=  mysql_fetch_array($listado_productos)) 
Gracias de antemano.
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos

Última edición por LoUiMaNiAkO; 19/02/2014 a las 13:23 Razón: modificar etiquetas
  #2 (permalink)  
Antiguo 19/02/2014, 13:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unir Consultas

Bueno, el error es bastante simple.
Mira:

Código SQL:
Ver original
  1. SELECT *
  2. FROM producto_productos
  3. WHERE IDProducto_Catalogo=".$reg['IDProducto_Catalogo']."
  4. UNION
  5. SELECT *
  6. FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto
  7. WHERE producto_xtras.IDProducto_Catalogo = '" . $reg['IDProducto_Catalogo'] . "'
Estás haciendo un UNION sobre el resultado de la consulta a una tabla, con otra consulta a la misma tabla con un JOIN contra una segunda tabla, pero estás pidiendo todas las columnas de cada SELECT, y el segundo tiene más columnas que el primero.
El UNOIN en todos los DBMS requiere que ambas consultas devuelvan la misma cantidad de columnas, en el mismo orden y del mismo tipo.
Por otro lado, a nivel de PHP, ni siquiera te estás molestando en verificar que la query enviada se haya ejecutado correctamente. Tu asumes que funcionó bien, y eso es algo que nunca se debe asumir.
Debes siempre verificar si la ejecución de la query fue exitosa, antes de intentar hacer algo con ese result. Que esté correctamente escrito todo, no implica que la query devuelva algo... en especial si ese algo depende de variables...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 19/02/2014, 14:39
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: Unir Consultas

Gracias por tu respuesta aunque no entendi del todo bien,

si hago las consultas por separado funcionan correctamente.
Código PHP:
$listado_productos=  mysql_query(" SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$reg['IDProducto_Catalogo'] . "' ",$db); 
Código PHP:
 $listado_productos=  mysql_query("select * from producto_productos where IDProducto_Catalogo=".$reg['IDProducto_Catalogo']." ",$db); 
muesta

como podria unir los resultado??

tambien he intantado hacer esto y funciona pero no se como hacer el while

Código PHP:
$query_productos "select * from producto_productos where IDProducto_Catalogo = '" $row_catalogo['IDProducto_Catalogo'] . "'"  ;
        
$res_productos $mysql->query($query_productosfalse); 
$query_productos2 "SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$row_catalogo['IDProducto_Catalogo'] . "'"
        
$res_productos2 $mysql->query($query_productos2false); 
        
    
while(
$row_productos mysql_fetch_array($res_productos)){
            
$arreglo_prod[] = $row_productos['IDProducto_Producto'];
        }
        while(
$row_productos2 mysql_fetch_array($res_productos2)){
            
$arreglo_prod[] = $row_productos2['IDProducto_Producto'];
        } 
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #4 (permalink)  
Antiguo 19/02/2014, 15:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unir Consultas

Cita:
como podria unir los resultado??
Para unir las consultas no puedes poner "*". Tienes que indicar uno a uno los campos a obtener en las consultas, y en ambos deben obtenerse la msima cantidad, en el mismo orden.
A mi entender estás tratando de unir algo que no se puede unir.
Explicate qué se supone que quieres conseguir en la segunda consulta, y veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 19/02/2014, 15:39
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: Unir Consultas

tengo mis tablas

catalogos_catalogos
catalogo1 |
catalogo2 |
catalogo2 |

productos_productos
producto_catalogo1 |
producto_catalogo1 |
producto_catalogo2 |
producto_catalogo3 |

productos_xtras
IDProducto_xtras | IDProducto_Catalogo | IDProducto_Producto
1 catalogo1 producto_catalogo1
2 catalogo1 producto_catalogo3
3


explico.
tengo una tabla donde guardo el nombre de mis catalogos,
otra tabla donde guardo los productos y el id del catalogo al que corresponde,
y otra donde al catalogo 1 le puedo asignar como xtra un producto del catalogo2 otro del catalogo 3 etc.

y quiero hacer una consulta que me muestre en una tabla html todos los productos asignados al catalogo 1 o 2 o 3 segun el $reg['IDProducto_Catalogo']

entonces mi consulta deveria buscar prmero los productos del catalogo y luego agregar los productos asignados en la tabla productos_xtras y guardar en el mismo query.

no se como explicar esto.


si hago esto:
Código PHP:
 $listado_productos=  mysql_query("select * from producto_productos where IDProducto_Catalogo=".$reg['IDProducto_Catalogo']." ",$db); 
me muestra bien los productos asinados al catalogo. pero no los extras.

si hago esto:
Código PHP:
$listado_productos=  mysql_query(" SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$reg['IDProducto_Catalogo'] . "' ",$db); 
me muestra solo los productos xtras

por eso quiero unir la consulta.

EDITO: Crei que esto funcionaria

Código PHP:
$listado_productos=  mysql_query(" SELECT * FROM producto_productos JOIN producto_xtras ON 
 producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$reg['IDProducto_Catalogo'] . "'
 or producto_productos.IDProducto_Catalogo='"
.$reg['IDProducto_Catalogo']." '",$db); 
pero igual solo me muestra los productos xtras
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos

Última edición por LoUiMaNiAkO; 19/02/2014 a las 15:51
  #6 (permalink)  
Antiguo 19/02/2014, 15:59
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Unir Consultas

Son consultas incompatibles entre si. No puedes usar UNION para eso. A lo más podrías hacer un JOIN múltiple que te devuelva todo, pero si lo haces vas a estar protestando porque los datos de las primeras tablas se repiten una vez por cada instancia de la última.
Mejor manejalo por consultas separadas y construye la tabla de a vista por código.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/02/2014, 16:32
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: Unir Consultas

haber en la tabla productos xtras. solo guardo el id del catalogo al que se le asigno y del producto

$ID=10
mi primer consulta deve buscar IDCatalogo= $ID de aki digamos que me arroja 3 registros

producto_xtra1,2,3

ahora en mi otra consulta deve buscar en la tabla producto_productos todos los productos que tengan el IDCatalogo= $ID este me arroja 20 registros

producto1,2,....20

y lo que quiero hacer esque en esta segunda consulta tambien me muestre los 3 registros que me arrojo la primera

producto1
producto 2
producto3
producto20
producto_xtra1
producto_xtra2
producto_xtra3

Gracias por tu tiempo
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos
  #8 (permalink)  
Antiguo 20/02/2014, 12:39
Avatar de LoUiMaNiAkO  
Fecha de Ingreso: enero-2006
Mensajes: 198
Antigüedad: 18 años, 4 meses
Puntos: 1
Respuesta: Unir Consultas

Alguien tiene otra sugerencia??

ahorita estoy haciendo esto:
Código PHP:
$listado_productos[]=  mysql_query("select * from producto_productos where IDProducto_Catalogo=".$reg['IDProducto_Catalogo']." ",$db);  

 
 
$listado_productos[]=  mysql_query(" SELECT * FROM producto_productos JOIN producto_xtras ON producto_productos.IDProducto_Producto =  producto_xtras.IDProducto_Producto 
where producto_xtras.IDProducto_Catalogo = '" 
$reg['IDProducto_Catalogo'] . "' ",$db); 

   
                                
$totalRows_catalogo mysql_num_rows($listado);
                              for(
$i_cat 0$i_cat $totalRows_catalogo$i_cat++){
                               while(
$reg2=  mysql_fetch_array($listado_productos[$i_cat])) 
                   { 
me muestra bien los resultados pero me muestra muchos warnings.

Algun consejo?
__________________
:molesto: "Soy como dios k nunca llora y como satanas k nunca resa":molesto:

Dejate seducir por mis colmillos

Etiquetas: mysql, select
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 12:55.