Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Unir dos consultas en la misma tabla

Estas en el tema de Unir dos consultas en la misma tabla en el foro de Mysql en Foros del Web. Estimados Tengo la siguiente tabla : Código PHP: CREATE TABLE mer_mov  (    mer_mov_id int ( 11 )  NOT NULL auto_increment ,    mer_id int ( 11 )  NOT NULL ,    ...
  #1 (permalink)  
Antiguo 28/09/2011, 19:18
 
Fecha de Ingreso: abril-2003
Mensajes: 201
Antigüedad: 21 años
Puntos: 0
Unir dos consultas en la misma tabla

Estimados
Tengo la siguiente tabla :
Código PHP:
CREATE TABLE mer_mov (
  
mer_mov_id int(11NOT NULL auto_increment,
  
mer_id int(11NOT NULL,
  
mer_mov_tipo set('E','S'NOT NULL default 'E,S',
  
mer_mov_cant varchar(10NOT NULL,
  
mer_mov_fecha timestamp NOT NULL default CURRENT_TIMESTAMP,
  
mer_mov_motivo text,
  
mer_mov_usuario varchar(80) default NULL,
  
PRIMARY KEY  (mer_mov_id),
  
KEY mer_id (mer_id)
ENGINE=MyISAM  DEFAULT CHARSET=utf8
En esa guardo los movimientos que ha tenido un producto, si es una entrada le asigno E y si es salida es S (mer_mov_tipo set), hasta el momento no habia sido un problema , ya que sacaba dos consultas una con las Entradas y otra con las Salidas y las restaba sacando el total (E - S), asi:

Código MySQL:
Ver original
  1. $entradas   = mysql_query("SELECT mer_id, mer_mov_tipo, SUM(mer_mov_cant) AS entra FROM mer_mov WHERE mer_id = ".$id." AND mer_mov_tipo = 'E' GROUP BY mer_mov_tipo", $cnx);
  2. $salidas    = mysql_query("SELECT mer_id, mer_mov_tipo, SUM(mer_mov_cant) AS sale FROM mer_mov WHERE mer_id = ".$id." AND mer_mov_tipo = 'S' GROUP BY mer_mov_tipo", $cnx);


jeje no debe ser muy elegante creo, pero funciona hasta ahora :P

Ahora el problema es que quiero hacer un reporte (listar) con todos los productos, osea la pregunta es:
¿Como puedo dejar todo eso en una sola consulta?

Para que quede sumado todas las Entradas y sumado todas las Salidas por producto...

Gracias
  #2 (permalink)  
Antiguo 29/09/2011, 00:04
 
Fecha de Ingreso: mayo-2011
Mensajes: 44
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Unir dos consultas en la misma tabla

yo creo que son un select simple en la tabla lo prodrias hacer, ahora bien si no pego bien con este respuesta puedes usar el "UNION", es una palabra reservada de mysql que la pones en medio de dos selects, y los une en un solo resultado, lo unico que ocupa es que tengas el mismo tipo y cantidad de columnas, puedes buscar un poco sobre el o me preguntas
pura vida
  #3 (permalink)  
Antiguo 29/09/2011, 14:57
 
Fecha de Ingreso: abril-2003
Mensajes: 201
Antigüedad: 21 años
Puntos: 0
Respuesta: Unir dos consultas en la misma tabla

Hice lo siguiente , pero no tengo resultado positivo con UNION

Código SQL:
Ver original
  1. (SELECT
  2.   mer_mov.mer_mov_id,
  3.   mer_mov.mer_id,
  4.   mer_mov.mer_mov_tipo
  5. FROM
  6.   mer_mov
  7. WHERE
  8.   mer_mov.mer_mov_tipo = 'E')
  9. UNION
  10. (SELECT
  11.   mer_mov.mer_mov_id,
  12.   mer_mov.mer_id,
  13.   mer_mov.mer_mov_tipo
  14. FROM
  15.   mer_mov
  16. WHERE
  17.   mer_mov.mer_mov_tipo = 'S')


Otra ayudita !!!
  #4 (permalink)  
Antiguo 29/09/2011, 20:15
 
Fecha de Ingreso: mayo-2011
Mensajes: 44
Antigüedad: 12 años, 11 meses
Puntos: 2
Respuesta: Unir dos consultas en la misma tabla

Es que seria sin los parentesis, prueba ese mismo codigo pero dejandolo asi

Código SQL:
Ver original
  1. SELECT
  2.       mer_mov.mer_mov_id,
  3.       mer_mov.mer_id,
  4.       mer_mov.mer_mov_tipo
  5.     FROM
  6.       mer_mov
  7.     WHERE
  8.       mer_mov.mer_mov_tipo = 'E'
  9.     UNION
  10.     SELECT
  11.       mer_mov.mer_mov_id,
  12.       mer_mov.mer_id,
  13.       mer_mov.mer_mov_tipo
  14.     FROM
  15.       mer_mov
  16.     WHERE
  17.       mer_mov.mer_mov_tipo = 'S'

o si no hazla consulta asi para ver si te funciona para lo qure quieres

Código MySQL:
Ver original
  1.       mer_mov.mer_mov_id,
  2.       mer_mov.mer_id,
  3.       mer_mov.mer_mov_tipo
  4.     FROM
  5.       mer_mov
  6.     WHERE
  7.       mer_mov.mer_mov_tipo = 'E' OR   mer_mov.mer_mov_tipo = 'S'
  8.      ORDER BY mer_mov.mer_mov_tipo

a ver cual de las dos te funciona, y ahi me cuentas
Pura Vida
  #5 (permalink)  
Antiguo 30/09/2011, 01:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Unir dos consultas en la misma tabla

Código MySQL:
Ver original
  1. SELECT mer_mov.mer_id,
  2.              SUM(IF(mer_mov_tipo = 'E',mer_mov_cant,0)) AS entra,
  3.              SUM(IF(mer_mov_tipo = 'S',mer_mov_cant,0)) AS sale
  4. FROM mer_mov
  5. WHERE mer_id = ".$id."
  6. GROUP BY mer_id;

Será esto lo que querias?

o esto para todos los mer_id

Código MySQL:
Ver original
  1. SELECT mer_mov.mer_id,
  2.              SUM(IF(mer_mov_tipo = 'E',mer_mov_cant,0)) AS entra,
  3.              SUM(IF(mer_mov_tipo = 'S',mer_mov_cant,0)) AS sale
  4. FROM mer_mov
  5. GROUP BY mer_id;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #6 (permalink)  
Antiguo 30/09/2011, 06:03
 
Fecha de Ingreso: abril-2003
Mensajes: 201
Antigüedad: 21 años
Puntos: 0
Respuesta: Unir dos consultas en la misma tabla

Cuanto sabe quimfv!!!!

Los dos me sirven!

Muchas Gracias!!!

Etiquetas: query, select, sql, tabla
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 11:56.