Ver Mensaje Individual
  #8 (permalink)  
Antiguo 07/01/2009, 16:39
SebasSebas
 
Fecha de Ingreso: junio-2008
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: Tener X resultados pero para cada...

Cita:
Iniciado por jurena Ver Mensaje
¿Cómo vas a usar los datos que saques? ¿No te interesará hacer una consulta de departamentos y luego con programación mostrar los 5 de cada departamento?
Todo dependerá de cómo vayas a usar los datos. Si trabajas con PHP te resultará fácil con dos consultas, que en realidad serán tantas como departamentos haya, más la de departamentos. Puedes o mostrarlas por separado o cargarlas en un array y mostrarlas luego todas sin problema. Pero esto es de programación, no de bases de datos. Además no tendrás que preocuparte de saber los departamentos que tienen, pues lo hará de todos los que tengan...
Eso sonó como a la segunda opción

Los datos sobre la cantidad de departamentos ya están cargados en un array, así que ese no entra en mis preocupaciones (y tampoco debería serlo ya que se trata de una sola consulta y de rutina).

Sí uso php, y así como antes construía la query con los UNION, podría hacer lo mismo con querys individuales, pero la idea de tener que hacer mysqlquery(...) 10, 20, o 40 veces, con su respectivo mysql_fetch_assoc, de verdad no me atrae mucho que digamos .

Siendo sincero, no tengo mucha idea de como funciona el motor SQL, le tengo cierta idea incluso, "no me importa trabajar más en programación", siempre y cuando force lo menos posible la DB con consultas, llamadas y demás. De ahí viene cierto prejuicio y por eso busco hacer las cosas optimizando la sentencia para hacer pocas llamadas a la DB en lugar de fastidiarla a cada rato.

Como dije arriba, "no se como funciona internamente el motor SQL", y quizás de una u otra forma la carga sea exactamente la misma, y solo es idea mía que con un ciclo de querys, querys, querys, hago más pesada la cuestión.

Me parece que solo me quedará hacer eso que dices, que es justo lo que quería evitar y encontrar una forma "mejor".

Gracias (si alguien más tiene alguna idea, no dude en decirla).

Cita:
Iniciado por Thumper Ver Mensaje
En el código, para tener datos creo una varaible tipo tabla q simula ser tu tabla y al menos cuando ejecuto sale correcto.

Código SQL:
Ver original
  1. DECLARE @TABLE TABLE( idint INT, tipo CHAR(1))
  2.  
  3. INSERT INTO @TABLE VALUES( 1, 'A' )
  4. INSERT INTO @TABLE VALUES( 2, 'A' )
  5. INSERT INTO @TABLE VALUES( 3, 'A' )
  6. INSERT INTO @TABLE VALUES( 4, 'B' )
  7. INSERT INTO @TABLE VALUES( 5, 'B' )
  8. INSERT INTO @TABLE VALUES( 6, 'B' )
  9. INSERT INTO @TABLE VALUES( 7, 'C' )
  10. INSERT INTO @TABLE VALUES( 8, 'C' )
  11. INSERT INTO @TABLE VALUES( 9, 'C' )
  12.  
  13. SELECT  t.idint, t.tipo
  14. FROM    @TABLE t
  15. WHERE   t.tipo IN ( 'A', 'C' ) AND
  16.     t.idint IN ( SELECT top 2 t1.idint
  17.              FROM @TABLE t1
  18.              WHERE t1.tipo = t.tipo )

Por si no manejas SQL, Top 2 = Limit 2 creo q lo demas es =.

Saludos
Muchas gracias por el curro, esto lo voy a guardar y estudiarlo para ver que saco para futuras ocaciones; pero para este caso, ya tengo la limitación con los UNION, así que será igual con este sub SELECT.

Muchas gracias