Foros del Web » Programando para Internet » PHP »

consulta mixtas en SQL

Estas en el tema de consulta mixtas en SQL en el foro de PHP en Foros del Web. Deseo hacer una consulta a 2 tablas q posee los mismo campos cada tabla, pero me marca un error lo que hago es lo siguiente: ...
  #1 (permalink)  
Antiguo 26/11/2003, 13:23
Usuario no validado
 
Fecha de Ingreso: abril-2002
Ubicación: mx
Mensajes: 65
Antigüedad: 22 años, 7 meses
Puntos: 0
Pregunta consulta mixtas en SQL

Deseo hacer una consulta a 2 tablas q posee los mismo campos
cada tabla, pero me marca un error

lo que hago es lo siguiente:
Código PHP:
$consulta=mysql_query("SELECT id_pedido,estado,fecha,total 
FROM pedidos,p_historial WHERE 
id_cliente=$id_cliente ORDER BY $ORD"
,$link);
if (
$row=mysql_fetch_array($consulta))
{................ } 
y me marca el siguiente error:
Warning: mysql_fetch_array(): supplied argument is not a valid
MySQL result resource in c:\htdocs\prueba\cuenta.php on line 39



Alguien puede ayudarme..... please

$ORD indica por cual campo se ordenaran los datos

Última edición por kmizael; 27/11/2003 a las 13:54
  #2 (permalink)  
Antiguo 26/11/2003, 13:43
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Usa:

Código PHP:
$consulta=mysql_query("SELECT id_pedido,estado,fecha,total FROM pedidos,p_historial WHERE 
id_cliente=$id_cliente ORDER BY $ORD"
,$link) or die (mysql_error()); 
(el mysql_error() .. ) Para intentar localizar el error de SQL o conexión que puedas tener. El uso de esa función te dará algún error por parte de Mysql.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 26/11/2003, 14:49
Usuario no validado
 
Fecha de Ingreso: abril-2002
Ubicación: mx
Mensajes: 65
Antigüedad: 22 años, 7 meses
Puntos: 0
CREO Q NECESITO EXPLICARME BIEN.

Tengo 2 tablas pedidos, p_historial, las 2 tablas tiene los mismo tipos de campos y del mismo nombre (por cuestiones de administracion). En una llevo el control de los pedidos y en la otra el historial de los ya procesados.

Cuando el cliente consulta sus pedidos, necesito mostrarle los pedidos contenidos en las 2 tablas. Lo q deseo es q mediante una consulta a los 2 tablas pueda extraer todos los pedidos para asi posteriormente con un ciclo recorrer el areglo y extraer los datos no importando de a q tabla pertenece el campo
  #4 (permalink)  
Antiguo 26/11/2003, 15:11
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
me imagino que le campo id_cliente esta presente en ambas tablas, por lo que la consulta tal como esta hecha no seria valida dado que el campo id_cliente es ambiguo, es decir, no se sabe a que tabla pertenece.
solucion:

$consulta=mysql_query("SELECT id_pedido,estado,fecha,total FROM pedidos,p_historial WHERE
pedidos.id_cliente=$id_cliente ORDER BY $ORD",$link);
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #5 (permalink)  
Antiguo 26/11/2003, 15:25
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Lo que te ha dicho claudiovega es mas o menos lo que te diria el mensaje de error si usarias el codigo de Cluster. Añadiendo que lo de ambiguedad tambien afecta a los campos seleccionados.

Tienes un pequeño lio con lo que es una select con varias tablas en el from. No es "primero una tabla y luego otra". Es realizar la consulta sobre una nueva tabla con tantas columnas como la suma de las columnas de cada una de las tablas, y tantas filas como el producto de las filas de ambas tablas. Asi que si tus dos tablas tienen cada una 4 campos, la tabla sobre la que realizas la consulta tiene 8 campos (columnas). Y si una tabla tiene 100 registros (filas) y la otra 1000, la tabla sobre la que realizas la consulta tendra 100000 registros (filas).

Si quieres verlo mas visual, habre el access y haz la consulta SELECT * FROM tabla1, tabla2. Y veras lo que te sale.

Lo que tu pretendes es realizar una UNION (www.mysql.com/union), pero solo creo que existe en MySQL 4.0 en adelante. Creo que en los comentarios de los usuarios pone como simularlo en versiones anteriores.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 26/11/2003, 15:42
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 21 años, 1 mes
Puntos: 11
tienes razon josemi, no me di cuenta que en realidad necesita una UNION. Seria asi:

SELECT id_pedido,estado,fecha,total FROM pedidos WHERE id_cliente=$id_cliente
UNION
SELECT id_pedido,estado,fecha,total FROM p_historial WHERE id_cliente=$id_cliente
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #7 (permalink)  
Antiguo 26/11/2003, 16:25
Usuario no validado
 
Fecha de Ingreso: abril-2002
Ubicación: mx
Mensajes: 65
Antigüedad: 22 años, 7 meses
Puntos: 0
CIERTO, estuve leyendo por ahi.
Muchisimas gracias amigos por sus aportaciones,
ahora trato de realizarlo. Y si lo tengo lo muestro.

Última edición por kmizael; 26/11/2003 a las 16:26
  #8 (permalink)  
Antiguo 27/11/2003, 13:19
Usuario no validado
 
Fecha de Ingreso: abril-2002
Ubicación: mx
Mensajes: 65
Antigüedad: 22 años, 7 meses
Puntos: 0
Quedo !

Bien esto ya quedo....
Código PHP:
$consulta=mysql_query("(SELECT id_pedido,estado,fecha,total 
FROM pedidos WHERE id_pedido=$P) 
UNION 
(SELECT id_pedido,estado,fecha,total FROM p_cancelados WHERE 
id_pedido=$P) ORDER BY $ORD"
,$link); 
La consulta de los pedidos actuales y cancelados de un cliente a
dos tablas distintas mediante UNION, hay q fijarse q cada tabla
tiene el mismo nombre y tipo de datos para cada campo. Y el
orden de los campos seleccionados debe ser el mismo para cada
SELECT.

Despues se puede uno referir a ellos, como una consulta normal.

Código PHP:
while ($row=mysql_fetch_arrray($consulta))
{
  echo 
$row["id_pedido"],'   ',
$row["fecha"],'   ',
$row["total"],'   ',
$row["estado"];

y eso es too amigos
Facil verdad ....

Gracias a claudiovega, josemi, cluster, fueron muy atentos
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 13:02.