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

consulta a dos campos ordenados DESC

Estas en el tema de consulta a dos campos ordenados DESC en el foro de Mysql en Foros del Web. Hola de nuevo! queria saber si me podrian ayudar con un problemita que tengo. resulta que quiero hacer un "ver mas publicaciones"(facebook) o un "More"(twitter) ...
  #1 (permalink)  
Antiguo 08/11/2010, 22:50
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Exclamación consulta a dos campos ordenados DESC

Hola de nuevo!

queria saber si me podrian ayudar con un problemita que tengo.

resulta que quiero hacer un "ver mas publicaciones"(facebook) o un "More"(twitter)

el problema no es como hacerlo, eso ya lo se. hace una consulta de 10 filas por ejemplo guarda el ultimo valor, y despues hace una consulta nueva de 10 filas empezando por el ultimo valor.(explico por las dudas)

el tema es que tengo dos campos importantes en mi tabla, uno es

"UserID" y el otro "classid" ordenados (ORDER BY userid desc, usertype desc)

pero me muestra asi

Userid--- Classid
10------------2
5--------------2
3 -------------2
11-------------1
8---------------1
12-------------0
9--------------0
2 -------------0
1--------------0

entonces si por ejemplo les pongo un LIMIT 2

me responde ben

Userid------Classid
10 ------------2
5--------------2

a la segunda consulta seria

WHERE userid<5 ORDER BY userid desc, usertype DESC LIMIT 2

que ahi el problema

Userid-----Classid
3-------------- 2
2 --------------0


se pierde el Userid 11,8,12,9


como puedo hacer para que me recorra los campos de a 2 en este caso sin saltearlos


Saludos!
  #2 (permalink)  
Antiguo 09/11/2010, 03:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta a dos campos ordenados DESC

Por un lado, por la muestra que estás poniendo, tu sentencia completa no está usando estee orden:
Código SQL:
Ver original
  1. ORDER BY userid DESC, usertype DESC
Eso es evidente, porque no está ordenando la lista ni por el primero de los elementos.
Por otro lado, estás haciendo un mal razonamiento en el segundo paso. Lo que debes obtener no son los UserId inferiores al último de los que mostraste. Lo que debes obtener es la siguiente parte de la lista completa, y eso se hace con el OFFSET del LIMIT:
Primera llamada:
Código MySQL:
Ver original
  1. FROM tabla
  2. ORDER BY userid DESC, usertype DESC

Segunda llamada:
Código MySQL:
Ver original
  1. FROM tabla
  2. ORDER BY userid DESC, usertype DESC
  3. LIMIT 2, 2;
Tercera llamada:
Código MySQL:
Ver original
  1. FROM tabla
  2. ORDER BY userid DESC, usertype DESC
  3. LIMIT 4, 2;

¿Notas la diferencia?
El primer valor indica cuántos registros descartará antes de devolverte la cantidad indicada en el segundo valor. No es necesario indicarlo al principio porque su valor es cero, y cuando el parser encuentra un sólo parámetro, asume que el offset es cero.

Finalmente, sería bueno que nos postearas la sentencia completa para poder ver por qué no está ordenando el resultado de la consulta tal y como debería. Es posible que haya un error en la forma de hacerla y que no constituya un error de sintaxis.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 09/11/2010, 03:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta a dos campos ordenados DESC

Cita:
WHERE userid<5 ORDER BY userid desc, usertype DESC LIMIT 2

que ahi el problema

Userid-----Classid
3-------------- 2
2 --------------0


se pierde el Userid 11,8,12,9
Es lógico puesto que esos Userid son mayores que 5 y por tanto no cumplen el WHERE.

La solucion pasa por el segundo parametro de LIMIT

Cuando pones LIMIT 2 en realidat le estas diciendo LIMIT 0,2 es decir dos registros empezando des de el primero (0).

Por tanto debes hacer lo siguiente

La primera consulta debe ser LIMIT 0,2 la segunda LIMIT 2,2 la tercera LIMIT 4,2 y así sucesivamente y no poner ningun WHERE que te esta filtrando los registros por un criterio que no te interesa.

Para ello debes guardar el numero de veces que se le ha dado a More..

Quim

Nota: gnzsoloyo Siempre nos pisamos!!!

Última edición por quimfv; 09/11/2010 a las 03:53 Razón: Nota
  #4 (permalink)  
Antiguo 09/11/2010, 03:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta a dos campos ordenados DESC


Tal vez deberíamos coordinar un horario, o alguna seña secreta

En fin, saludos quimfv.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 09/11/2010, 10:36
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: consulta a dos campos ordenados DESC

la lista si esta ordenada, me tira asi los datos cuando hago la consulta

ORDER BY classid DESC,userid DESC;
fijate que primero estan los de class en descendente y cuando cambia empieza descendente tambien en userid.

igual entiendo lo que me dicen!,

tienen razon en usar un limit 2,2 - 4,2 - 6,2 etc

pero lo que hace esto me trae de la nueva consulta los registros desde el dos hasta 2 mas y asi

que pasa si se agregan dos nuevos usuarios?

la consulta LIMIT 0,2 Y 2,2 serian la misma ya que empieza desde el principio, ahi el uso del where userid<"ultimo valor"

no se si me entienden

sigo con el problema
  #6 (permalink)  
Antiguo 09/11/2010, 12:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: consulta a dos campos ordenados DESC

sino lo que tengo pensado hacer es primero seleccionar los classid 2, despes los 1 y despues los 0 ordenados por userid DESC

en 3 consultas

y si por ejemplo uso un limit 10, y son 55 registros, el ultimo va a ser de 5 entonces con php hago la consulta para classid 1 de limit 5 y despues continuo con la 10, es decir relleno con la otra classe.. y asi hasta que llegue a cero y siempre los voy a tener ordenados por userid...

no se si es conveniente hacer eso

uds que dicen?
  #7 (permalink)  
Antiguo 09/11/2010, 12:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta a dos campos ordenados DESC

Lo que debes hacer es primero verificar cuántos registros devolverá la consulta, y una vez realizado eso, usar ese parámetro para crear dinámicamente la consulta con los LIMIT correspondientes.
Eso ya es tema de programación. Te conviene consultarlo en el foro de PHP.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 09/11/2010, 12:27
 
Fecha de Ingreso: febrero-2010
Mensajes: 31
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: consulta a dos campos ordenados DESC

claro, es asi. es la idea que tengo, y se como hacerla, pero el tema es que yo queria hace que el procesamiento de consultas lo haga la base de datos, sin php, para no perder tiempo... por eso preguntaba aca...

lo voy a hacer asi pero si conoces alguna forma mejor bienvenida sea!


Gracias por su tiempo!

Saludos!
  #9 (permalink)  
Antiguo 09/11/2010, 12:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: consulta a dos campos ordenados DESC

Cita:
claro, es asi. es la idea que tengo, y se como hacerla, pero el tema es que yo queria hace que el procesamiento de consultas lo haga la base de datos, sin php, para no perder tiempo... por eso preguntaba aca...
Desde el momento en que son lecturas sucesivas enviadas por interacción de un usuario con la página, ya no es posible resolverlo únicamente por la base.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campos, dos
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 03:28.