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

[SOLUCIONADO] Consulta con cuenta > 1 y con condiciión

Estas en el tema de Consulta con cuenta > 1 y con condiciión en el foro de Mysql en Foros del Web. Hola y saludos a tod@s Tengo las siguientes tablas: Código: tabla1: tabla2: tabla3: tabla4: codpais | coddis | codprov | localidad | importe cod1 | ...
  #1 (permalink)  
Antiguo 11/06/2015, 14:44
 
Fecha de Ingreso: abril-2004
Mensajes: 13
Antigüedad: 20 años
Puntos: 0
Consulta con cuenta > 1 y con condiciión

Hola y saludos a tod@s

Tengo las siguientes tablas:
Código:
tabla1:							tabla2:            tabla3:	          tabla4:
codpais | coddis | codprov | localidad | importe        cod1 | pais        cod2 | distrito        cod3 | prov	   
------------------------------------------------	-----------	   ---------------        -----------
     34 |      7 |      24 |    loc_a1 |      11	  1  |  USA	      1 |    dis01           1 |   AR
     34 |      7 |      24 |    loc_a2 |      12	 34  |  ESP	      3 |    dis02           3 |   AL
     34 |     12 |      15 |    loc_b1 |      21			      7 |    dis03          15 |   CO
     34 |     12 |	15 |    loc_b2 |      22			     10 |    dis04          24 |   LE
     34 |     10 |	 3 |    loc_c1 |      31			     12 |    dis05          33 |   AS
     34 |      3 |	33 |    loc_d1 |      41
     34 |      3 |	33 |    loc_d2 |      42
     34 |      3 |	33 |    loc_d3 |      43
     34 |      1 |	29 |    loc_e1 |      51
      1 |     99 |	99 |    loc_f1 |      61
      1 |     52 |	52 |    loc_g2 |      71
y necesito consultar los datos de la tabla1 de forma que me muestre los que la cuenta de codprov sea mayor que 1 y que no sean por ejemplo 15

Es decir, que la salida sea:
Código:
pais | distrito | localidad | provincia | importe
-------------------------------------------------
 ESP |    dis03 |    loc_a1 |        LE |      11
 ESP |    dis03 |    loc_a2 |        LE |      12
 ESP |    dis02 |    loc_d1 |        AS |      41
 ESP |    dis02 |    loc_d2 |        AS |      42  
 ESP |    dis02 |    loc_d3 |        AS |      43
Alguna idea de cómo hacerlo?
  #2 (permalink)  
Antiguo 11/06/2015, 14:48
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: Consulta con cuenta > 1 y con condiciión

necesitas hacer una consulta de varias tablas?

de ser así usa el inner join,

de lo contrario explica un poco mejor y con gusto te apoyo
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..
  #3 (permalink)  
Antiguo 11/06/2015, 15:31
 
Fecha de Ingreso: abril-2004
Mensajes: 13
Antigüedad: 20 años
Puntos: 0
Respuesta: Consulta con cuenta > 1 y con condiciión

Lo que necesito es lo que pongo como salida.

Si lo prefiereres olvídate de las tablas 2, 3 y 4 y hacer la consulta sobre la tabla1 que la combinación con el resto de las tablas de momento es prescindible, es decir, que la salida sea:
Código:
codpais | coddis | codprov | localidad | importe
------------------------------------------------
     34 |      7 |      24 |    loc_a1 |      11
     34 |      7 |      24 |    loc_a2 |      12
     34 |      3 |	33 |    loc_d1 |      41
     34 |      3 |	33 |    loc_d2 |      42
     34 |      3 |	33 |    loc_d3 |      43
  #4 (permalink)  
Antiguo 11/06/2015, 16:14
 
Fecha de Ingreso: febrero-2015
Mensajes: 89
Antigüedad: 9 años, 2 meses
Puntos: 1
Respuesta: Consulta con cuenta > 1 y con condiciión

no estas explicando nada de la logica que quieres q haga es decir porque no coges el registro que tiene el codprov 3?

si lo que quieres es limitar tus codprov seria:

Código SQL:
Ver original
  1. SELECT * FROM tabla1 WHERE codprov NOT IN (3,15)

Con esto te arroja lo que quieres. :/
  #5 (permalink)  
Antiguo 11/06/2015, 16:53
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: Consulta con cuenta > 1 y con condiciión

importe y localidad perteneces a tabla1,

distrito a la tabla 3

pais a la tabla 2

provincia a la tabla 4

de estos datos y tablas esta formada tu salida.

mira
ahi tenes que poner un id_comun para poder hacer relacion entre las trablas

para decir algo así

Código PHP:
Ver original
  1. $result=mysql_query('SELECT * FROM  tabla1 INNER JOIN tabla2 ON  tabla1.compo = tabla2.campo WHERE campo ="'.$dato .'"') ;

y asi podes ir poniendo inner join como gustes , y lo que hace esto e sque te genera una tabla temporal.

si necesitas ayuda me comentas y con gusto lo hacemos juntos.
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..

Última edición por herzbazi; 11/06/2015 a las 16:55 Razón: mejorar
  #6 (permalink)  
Antiguo 12/06/2015, 01:32
 
Fecha de Ingreso: abril-2004
Mensajes: 13
Antigüedad: 20 años
Puntos: 0
Respuesta: Consulta con cuenta > 1 y con condiciión

Los datos de la tabla1 son un ejemplo y no se sabe cuantos datos pueden haber.

Si miramos codprov en la tabla1 vemos las siguientes repeticiones:
Código:
codprov | veces
---------------
     24 |     2
     15 |     2
      3 |     1
     33 |     3
     29 |     1
     99 |     1
     52 |     1
Pues lo que se necesita es sacar aquellos registros cuya cuenta sea mayor que 1 pero no los que tengan como codprov el 15
  #7 (permalink)  
Antiguo 12/06/2015, 08:01
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con cuenta > 1 y con condiciión

Hola pilatos.

La consulta que planteas, es bastante simple, lo único que tienes que hacer es utilizar la cláusula HAVING en conjunto con el COUNT para filtrar lo que quieres.

Código MySQL:
Ver original
  1. mysql> SELECT *
  2.     -> FROM tabla;
  3. +---------+--------+---------+-----------+---------+
  4. | codpais | coddis | codprov | localidad | importe |
  5. +---------+--------+---------+-----------+---------+
  6. |      34 |      7 |      24 | loc_a1    |      11 |
  7. |      34 |      7 |      24 | loc_a2    |      12 |
  8. |      34 |     12 |      15 | loc_b1    |      21 |
  9. |      34 |     12 |      15 | loc_b2    |      22 |
  10. |      34 |     10 |       3 | loc_c1    |      31 |
  11. |      34 |      3 |      33 | loc_d1    |      41 |
  12. |      34 |      3 |      33 | loc_d2    |      42 |
  13. |      34 |      3 |      33 | loc_d3    |      43 |
  14. |      34 |      1 |      29 | loc_e1    |      51 |
  15. |       1 |     99 |      99 | loc_f1    |      61 |
  16. |       1 |     52 |      52 | loc_g2    |      71 |
  17. +---------+--------+---------+-----------+---------+
  18. 11 rows in set (0.00 sec)
  19.  
  20. mysql> SELECT codprov, COUNT(codprov) total
  21.     -> FROM tabla
  22.     -> WHERE codprov != 15
  23.     -> GROUP BY codprov
  24.     -> HAVING COUNT(codprov) > 1;}
  25. +---------+-------+
  26. | codprov | total |
  27. +---------+-------+
  28. |      24 |     2 |
  29. |      33 |     3 |
  30. +---------+-------+
  31. 2 rows in set (0.00 sec)

Si necesitas información adicional de tu tabla para estos codprov, puedes meter esto como una subconsulta para hacer un IN o mejor aun, hacer un INNER JOIN.

Saludos
Leo.
  #8 (permalink)  
Antiguo 12/06/2015, 08:22
 
Fecha de Ingreso: abril-2004
Mensajes: 13
Antigüedad: 20 años
Puntos: 0
Respuesta: Consulta con cuenta > 1 y con condiciión

Esos son los registros agrupados que hay mostrar, es decir los que tenga como codprov el 24 y el 33, es decir lo que debe salir es:
Cita:
Iniciado por pilatos Ver Mensaje
Lo que necesito es lo que pongo como salida.

Si lo prefiereres olvídate de las tablas 2, 3 y 4 y hacer la consulta sobre la tabla1 que la combinación con el resto de las tablas de momento es prescindible, es decir, que la salida sea:
Código:
codpais | coddis | codprov | localidad | importe
------------------------------------------------
     34 |      7 |      24 |    loc_a1 |      11
     34 |      7 |      24 |    loc_a2 |      12
     34 |      3 |	33 |    loc_d1 |      41
     34 |      3 |	33 |    loc_d2 |      42
     34 |      3 |	33 |    loc_d3 |      43
  #9 (permalink)  
Antiguo 12/06/2015, 08:42
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta con cuenta > 1 y con condiciión

Hola de nuevo pilatos:

¿y qué parte de lo que te dije no se entiende???

Código:
Si necesitas información adicional de tu tabla para estos codprov, puedes meter esto como una subconsulta para hacer un IN o mejor aun, hacer un INNER JOIN.
¿es muy complicado tratar de hace esto?

Código:
SELECT * FROM tabla 
WHERE
codprov IN ( aqui pones la subconsulta );
o es muy complicado tratar de hacer esto:

Código:
SELECT T1.* 
FROM tabla T1
INNER JOIN (aquí pones la subconsulta) T2 ON T1.codprov = T2.codprov
Mucho ojo... no esperes una consulta sólo para copiar y pegar. lo menos que podemos pedir es que atiendas las indicaciones e INTENTES hacer las consultas... si tienes problemas ENTONCE POSTEAS LO QUE INTENTASTE HACER...

Saludos
Leo.
  #10 (permalink)  
Antiguo 12/06/2015, 10:18
 
Fecha de Ingreso: abril-2004
Mensajes: 13
Antigüedad: 20 años
Puntos: 0
Respuesta: Consulta con cuenta > 1 y con condiciión

Muchas gracias Leo.

Entender lo entendi todo desde el principio, lo que sucede es que esa consulta ya la tenía generada y me estaba volviendo loco para usarla como subconsulta.

Como comprenderás el ejemplo que he puesto es sólo una pequeña parte de la consulta que tengo que generar.

Para el ejemplo inicial pongo aquí una posible solución (por si le sirve a alguien)

Código MySQL:
Ver original
  1. SELECT T3.pais,T4.distrito,T5.prov AS provincia,T1.localidad,T1.importe
  2.   FROM tabla1 T1
  3.   INNER JOIN (
  4.       SELECT codprov, COUNT(codprov) AS total
  5.         FROM tabla1
  6.           WHERE codprov != 15
  7.           GROUP BY codprov
  8.           HAVING COUNT(codprov) > 1
  9.   ) T2
  10.   ON T1.codprov = T2.codprov
  11. INNER JOIN tabla2 T3
  12.   ON T1.codpais = T3.cod1  
  13. INNER JOIN tabla3 T4
  14.   ON T1.coddis = T4.cod2   
  15. INNER JOIN tabla4 T5
  16.   ON T1.codprov = T5.cod3

Muchas gracias de nuevo.
  #11 (permalink)  
Antiguo 18/06/2015, 14:44
Avatar de herzbazi  
Fecha de Ingreso: febrero-2012
Mensajes: 612
Antigüedad: 12 años, 2 meses
Puntos: 36
Respuesta: Consulta con cuenta > 1 y con condiciión

amigo es que mira , desde un principio te he dado la respuesta de como se hace, si quieres que te apoyemos dándote el código exacto para lo que necesitas, deberías de poner como mínimo las tablas tal y como las tienes, y lo que quieras exactamente que de como resultado.

por que pones el código pero no tenemos referencia de tus tablas, ya que lo de arribas dices que es un ejemplo.
__________________
Enseña todo lo que sepas...
Aprende todo lo que puedas..

Etiquetas: 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 19:37.