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

ordenar registros con limites en mysql

Estas en el tema de ordenar registros con limites en mysql en el foro de Mysql en Foros del Web. Hola amigos, tengo una función la cual recibe dos parametros donde quiero que empiecen a tomar lo registros y la cantidad de registros a tomar. ...
  #1 (permalink)  
Antiguo 14/11/2011, 05:05
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
ordenar registros con limites en mysql

Hola amigos, tengo una función la cual recibe dos parametros donde quiero que empiecen a tomar lo registros y la cantidad de registros a tomar. La función toma el parámetro desde donde comienza a tomar los registros mediante metódo get, asi si
el usuario le da al enlace publicaciones recientes se le pasara al parámetro de la función de comienzo de registro el numero 0 y si le da al enlace publicaciones antiguas se le pasará el 3. El problema es que al principio de introducir los registros me va bién pero luego no sale lo que quiero y tampoco encuentro una lógica en su comportamiento, os dejo la función haber si podeis ayudarme, gracias.

Código PHP:
Ver original
  1. function mostrarTab($registros, $principio){
  2.     include("conexion.php");
  3.     $principio;
  4.     $registros;
  5.     $consulta=("select * from tablon where idsocio='$_SESSION[id]' ORDER BY contenido desc LIMIT   $principio,  $registros");
  6.     $result=mysql_query($consulta, $conexion);
  7.     while($row = mysql_fetch_array($result, MYSQL_ASSOC)){
  8.        
  9.         if($publicacion1[2]=="/"){
  10.         echo"<img src='".$row['contenido']."' height='200px' width='200px'
  11.         style='margin-top:20px; margin-left:250px; border: 1px solid blue;'/></br>";
  12.         }
  13.        
  14. else{
  15.        
  16.         echo "<p style=' margin-left:250px;'>".$row['contenido']."</p><br>";
  17.         }
  18.         }
  19.         if($_GET['pag']==0){
  20.         echo "<a href='perfiles.php?tablon=1&id=7&pag=3'>
  21.         publicaciones mas antiguas</a>";
  22.         }
  23.        
  24.         else{
  25.         echo "<a href='perfiles.php?tablon=1&id=7&pag=0'>
  26.         publicaciones actuales</a>";
  27.         }
  28.         }
  #2 (permalink)  
Antiguo 14/11/2011, 08:10
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ordenar registros con limites en mysql

....ORDER BY contenido desc LIMIT $principio, $registros...

Creo que tienes una confusion entre registros antiguos, limit y order by....

Supongamos que tienes $principio=0 y $registros=3

y tienes los siguientes registros

id----------fecha----------contenido
1----------2011-01-01---Z
2----------2011-01-01---A
3----------2011-01-03---B
4----------2011-01-04---M

Por ORDER BY contenido desc (orden alfabetico de contenido descendiente)

1----------2011-01-01---Z
4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A

por $principio=0 y $registros=3 (des del primero dame tres)

1----------2011-01-01---Z
4----------2011-01-04---M
3----------2011-01-03---B

Si los que quieres son los tres últimos debes ordenar por fecha

ORDER BY fecha desc

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A
1----------2011-01-01---Z


o

4----------2011-01-04---M
3----------2011-01-03---B
1----------2011-01-01---Z
2----------2011-01-01---A


(como no le indicas nada sql hará lo que le parezca en funcion del estado de los datos, incluso podria ordenarlos una vez de una manera y otra de la otra).


por $principio=0 y $registros=3 (des del primero dame tres)

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-02---A

o

4----------2011-01-04---M
3----------2011-01-03---B
1----------2011-01-01---Z

Si quieres que dentro de una misma fecha se ordene alfabeticamente

ORDER BY fecha desc, contenido ASC

en este caso seguro que daria

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A
1----------2011-01-01---Z


y por tanto siempre obendrias

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-02---A

al limitar por 0,3

Cita:
...tampoco encuentro una lógica en su comportamiento...
espero que la intuyas.

El tema és que en bbdd el orden de entrada de datos no es relevante, el motor los listara de la forma (orden) que le sea más eficiente. Si queremos un orden concreto debemos especificarlo.

Limit actua sobre el orden en que reciba los datos... luego el primer registro no es el primer registro entrado si no el primer registro segun el orden en que se hayan seleccionado.... y repito si no se especifica el orden el motor de bbdd hace lo que quiere o lo que puede para obtener los datos lo más rapido posible... eso no siempre genera la salida en el mismo orden y menos en el orden en que estamos pensando si no se lo pedimos...


Ufff que rollo me ha salido espero que te haya convencido.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 14/11/2011 a las 08:19
  #3 (permalink)  
Antiguo 14/11/2011, 08:19
 
Fecha de Ingreso: agosto-2008
Mensajes: 606
Antigüedad: 15 años, 8 meses
Puntos: 11
Respuesta: ordenar registros con limites en mysql

Gracias quimfv, para listar los registros mas reciente a mas antiguos(según entren en la base de datos) lo que he hecho es ordenar por el idtablón que es autonúmerico así los últimos registros que introduzco son los primeros que me muestran con su limite respectivo. De todas formas gracias ya que tu post es muy pedagógico y completo. Saludos.

Etiquetas: limites, php, query, registros, select, sql
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:57.