Ver Mensaje Individual
  #6 (permalink)  
Antiguo 15/09/2012, 04:30
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: 17 años
Puntos: 2658
Respuesta: ORDER By Invalida a GROUP en Mysql

Vamos por lo primero: En este foro no se debe ni se permite poner código de programación en ningún lenguaje (Normas del Foro de Bases de Datos).
- No aporta nada.
- Ensucia el SQL que necesitamos analizar.
- Esconde problemas potenciales en variables cuyos contenidos se desconocen.
- No todos los foristas de este subfor programan (puedes ser DBA sin jamás programar), y puede que los que lo hagan no usen el lenguaje que plantean.

¿Se comprendió?

Bien.

Ahora, vamos al problema:

Cita:
El caso es que los resultados están en orden de fecha desde lo mas nuevo hasta lo mas anterior, pero en la sentencia uso la sigla GROUP el cual evita que salgan registros duplicados, el problema es que de los registros duplicados me sale el primero en relacion de la fecha.

Intentando aclarar, del grupo formado (GROUP) me sale el mas anterior y no asi el mas nuevo como manda el ORDER BY, pero fuera del grupo (los unicos registros que salen) si salen como ordena el ORDER BY. no se si me explico bien
Eso es un efecto común del MySQL pr la forma en que implementa el GROUP BY, es un problema que se soluciona simplemente con lo que ya @jurena te indicó: Primero se ordena en una subconsulta y recién entonces se agrupa en la exterior.

Cita:
he probado el codigo, con comillas simples dentro del parentesis del centro, asi mismo con comillas dobles y sin comillas y me da igual error
Las comillas simples (en realidad se llaman apóstrofos) y las dobles (que son las verdaderas comillas), tienen diferente uso. De acuerdo a la configuración estandar del servidor de MySQL las comillas pueden ser interpretadas como nombres de columna, y eso te daría un serio problema.
Por otro lado, no aclaras qué error es el que te da.... ¿Supones que nosotros podemos adivinar lo que estás leyendo?

La consulta que propones es esta:
Código MySQL:
Ver original
  1.     (SELECT
  2.         news_acciones.action_in,
  3.         news_acciones.action_nick_id,
  4.         news_acciones.action_id,
  5.         news_acciones.action_fecha,
  6.         usuarios.nick,
  7.         usuarios.sexo,
  8.         usuarios.avatar
  9.     FROM news_acciones, usuarios
  10.     WHERE
  11.         usuarios.id=news_acciones.action_nick_id
  12.         && news_acciones.action_nick_id IN($amisql)
  13.         && news_acciones.action_in='tema musical'
  14.         OR news_acciones.action_in='dedicatoria'
  15.         OR news_acciones.action_in='upload-mp3'
  16.         OR news_acciones.action_in='add-mp3'
  17.         OR news_acciones.action_in='add-playlist'
  18.     ORDER BY news_acciones.action_fecha DESC)
  19. GROUP BY news_acciones.action_nick_id
Así como está escrita, conque cualquiera de estos valores seta verdadero devovlerá el registro, por lo que parece que no manejas bien la logica del WHRE:
Código MySQL:
Ver original
  1. OR news_acciones.action_in='dedicatoria'
  2.         OR news_acciones.action_in='upload-mp3'
  3.         OR news_acciones.action_in='add-mp3'
  4.         OR news_acciones.action_in='add-playlist'
Si lo ponemos así tiene más sentido:
Código MySQL:
Ver original
  1.     (SELECT
  2.         NA.action_in,
  3.         NA.action_nick_id,
  4.         NA.action_id,
  5.         NA.action_fecha,
  6.         U.nick,
  7.         U.sexo,
  8.         U.avatar
  9.     FROM news_acciones NA INNER JOIN usuarios U ON U.id = NA.action_nick_id
  10.     WHERE
  11.         NA.action_nick_id IN($amisql)
  12.         AND (NA.action_in='tema musical'
  13.         OR NA.action_in='dedicatoria'
  14.         OR NA.action_in='upload-mp3'
  15.         OR NA.action_in='add-mp3'
  16.         OR NA.action_in='add-playlist' )
  17.     ORDER BY NA.action_fecha DESC)
  18. GROUP BY NA.action_nick_id
La consulta sí debería devolverte las fecha más recientes de cada nik, tal como pides. La única condición es que la fecha sea una columna DATE o DATETIME.
Ahora bien, ¿cuál es el problema usándolo así?
¿Probaste usando phpMyadmin sólo la sentencia y verificando con datos reales, en lugar de usar la variable $amisql, como te dijo @jurena?
Porque hasta ahora no has respondido esa ni otras preguntas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)