Ver Mensaje Individual
  #5 (permalink)  
Antiguo 21/09/2015, 15:23
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Consulta, ver una cierta cantidad de registro sin limit

Hola danosmpar:

Me parece muy raro que tengas un error con el LIMIT, igual y deberías comentar en el foro del VB qué error es el que estás obteniendo, de esta manera podríamos revisar qué está pasando. En cuanto a otra forma para obtener esto, una sería "simulando" justamente por código la función LIMIT... hay varias formas, la más "simple" sería como se hace más o menos en ORACLE 11i, que sería con ROWNUM...

Checa este ejemplo, supongamos que tienes esta tabla:

Código MySQL:
Ver original
  1. mysql> SELECT nombre, apellido
  2.     -> FROM empleados;
  3. +--------+----------+
  4. | nombre | apellido |
  5. +--------+----------+
  6. | Uno    | One      |
  7. | Dos    | Two      |
  8. | Tres   | Three    |
  9. | Cuatro | Four     |
  10. | Cinco  | Five     |
  11. | Seis   | Six      |
  12. | Siete  | Seven    |
  13. | Ocho   | Eigth    |
  14. +--------+----------+
  15. 8 rows in set (0.00 sec)

ahora, supongamos que quieres paginar de 2 en 2, y mostrar la tercer página, es decir, los registros 5 y 6, con LIMIT lo harías así:

Código MySQL:
Ver original
  1. mysql> SELECT nombre, apellido
  2.     -> FROM empleados
  3.     -> LIMIT 4, 2;
  4. +--------+----------+
  5. | nombre | apellido |
  6. +--------+----------+
  7. | Cinco  | Five     |
  8. | Seis   | Six      |
  9. +--------+----------+
  10. 2 rows in set (0.00 sec)

Sin usar LIMIT, lo primero que tendrías que hacer es numerar tus registros, una forma sería así:

Código MySQL:
Ver original
  1. mysql> set @a:=0;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT @a:=@a+1 rownum, nombre, apellido
  5.     -> FROM empleados;
  6. +--------+--------+----------+
  7. | rownum | nombre | apellido |
  8. +--------+--------+----------+
  9. |      1 | Uno    | One      |
  10. |      2 | Dos    | Two      |
  11. |      3 | Tres   | Three    |
  12. |      4 | Cuatro | Four     |
  13. |      5 | Cinco  | Five     |
  14. |      6 | Seis   | Six      |
  15. |      7 | Siete  | Seven    |
  16. |      8 | Ocho   | Eigth    |
  17. +--------+--------+----------+
  18. 8 rows in set (0.00 sec)

y entonces puedes filtrar por el campo ROWNUM, de tal suerte que sin LIMIT, la consulta quedaría así:

Código MySQL:
Ver original
  1. mysql> SET @a:=0;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT * FROM
  5.     -> (  SELECT @a:=@a+1 rownum, nombre, apellido
  6.     ->    FROM empleados ) T
  7.     -> WHERE rownum > 4 AND rownum < 7;
  8. +--------+--------+----------+
  9. | rownum | nombre | apellido |
  10. +--------+--------+----------+
  11. |      5 | Cinco  | Five     |
  12. |      6 | Seis   | Six      |
  13. +--------+--------+----------+
  14. 2 rows in set (0.00 sec)

Si sólo quiere utilizar LIMIT con un parámetro, y mostrar por ejemplo 5 registros, como LIMIT lo harías así:

Código MySQL:
Ver original
  1. mysql> SELECT nombre, apellido
  2.     -> FROM empleados
  3.     -> LIMIT 5;
  4. +--------+----------+
  5. | nombre | apellido |
  6. +--------+----------+
  7. | Uno    | One      |
  8. | Dos    | Two      |
  9. | Tres   | Three    |
  10. | Cuatro | Four     |
  11. | Cinco  | Five     |
  12. +--------+----------+
  13. 5 rows in set (0.00 sec)

Con esta otra "técnica", lo tendrías que hacer así:

Código MySQL:
Ver original
  1. mysql> SET @a:=0;
  2. Query OK, 0 rows affected (0.00 sec)
  3.  
  4. mysql> SELECT * FROM
  5.     -> (  SELECT @a:=@a+1 rownum, nombre, apellido
  6.     ->    FROM empleados ) T
  7.     -> WHERE rownum <= 5;
  8. +--------+--------+----------+
  9. | rownum | nombre | apellido |
  10. +--------+--------+----------+
  11. |      1 | Uno    | One      |
  12. |      2 | Dos    | Two      |
  13. |      3 | Tres   | Three    |
  14. |      4 | Cuatro | Four     |
  15. |      5 | Cinco  | Five     |
  16. +--------+--------+----------+
  17. 5 rows in set (0.00 sec)


Esto es bastante inneficiente, y no es para nada recomendable, pero bueno, si no tienes otra opción, esta sería una forma para hacerlo.

Saludos
Leo.