Ver Mensaje Individual
  #7 (permalink)  
Antiguo 12/12/2008, 07:51
Avatar de gnzsoloyo
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 más optimizada

Analicemos bien el caso:
Este código:
Código sql:
Ver original
  1. SELECT users.username, MAX(photos.id) AS id
  2.        FROM users INNER JOIN photos
  3.               ON photos.user_id = users.id
  4. WHERE users.STATUS = 0 AND photos.STATUS = 0
  5. GROUP BY users.id
  6. ORDER BY MAX(photos.id) DESC
  7. LIMIT 0,6;
Esto te devuelve todos registros de usuarios y el ID de la foto de cada uno que sea el mayor para cada usuario.id. Si lo que deseas es que esas photo.id se ordenen, no lo puedes hacer en la misma sentencia, porque debes convertir la columna devuelta por la consulta en una columna real y no en el resultado de una función agregada. Eso se logra poniendo el resultado de esta consulta dentro de otra, como subconsulta:

Código sql:
Ver original
  1. SELECT username, id
  2. FROM (
  3.           SELECT users.username, MAX(photos.id) AS id
  4.           FROM users INNER JOIN photos
  5.               ON photos.user_id = users.id
  6.           WHERE users.STATUS = 0 AND photos.STATUS = 0
  7.           GROUP BY users.id ) Tabla1
  8. ORDER BY id DESC
  9. LIMIT 0,6;

De esta forma, la consulta se transforma en una tabla en memoria, y de esa tabla se toma el resultado de la consulta principal. Como la consulta principal opera sobre la tabla de memoria, ya toma datos prefiltrados y es muchísimo más rápida.

Pruébalo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)