Ver Mensaje Individual
  #5 (permalink)  
Antiguo 15/09/2012, 03:41
fido-strike
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 15 años, 11 meses
Puntos: 26
Respuesta: ORDER By Invalida a GROUP en Mysql

JOoo..!! ya no puedo mas ayer me quede hasta las 01:00 de la madrugada intentandolo, se que algun experto en Mysql puede ayudarme, pero intento con Max en fecha, intento con subconsultas, con una y otra manera pero no logro conseguir lo que quiero, PLS SOCORRO!!!

Dejo el codigo completo del script que estoy haciendo:

<?php
$Tamigos = mysql_query("SELECT id_user FROM amigos WHERE amigos='$user_nick' && aprovacion='si'");
$Toamigos = mysql_num_rows($Tamigos);
$TituloNovedades = array("usuarios","tus amigos");
if($Toamigos>=3){
$minimo = 1;
}else{
$minimo = 0;
}

//Hasta aqui compruebo la cantidad minima de amigos (3), al mismo tiempo hago la consulta para sacar a todos los amigos del usuario para sacar sus respectivas actividades. Luego continuo si se tiene un minimo de 3 amigos

if($minimo==1){
while($amigos = mysql_fetch_assoc($Tamigos)){
$idam[] = $amigos[id_user];
}
foreach($idam as $i=>$am){
if($i==0)
$amisql = $am;
else
$amisql .= ", ".$am;
}

$actions = "'tema musical', 'dedicatoria', 'upload-mp3', 'add-mp3', 'add-playlist'";

//Hasta aqui ya saco los IDS de los amigos y lo pongo en una cadena para poder usarlo en IN() de la consulta mysql. Tambien convierto las condiciones extras en $actions para acortar el codigo mysql. Prosigo con la sentencia y despues la consulta con $sql
//Aqui viene el problema, en la consulta, aunque la consulta se realiza y muestra resultados, el caso es que no lo hace en el orden que quiero.

$sql = "SELECT news_acciones.action_in, news_acciones.action_nick_id, news_acciones.action_id, usuarios.nick, usuarios.sexo, usuarios.avatar, MAX(news_acciones.action_fecha) as newfecha ";
$sql .= "FROM news_acciones INNER JOIN usuarios ON usuarios.id=news_acciones.action_nick_id ";
$sql .= "WHERE news_acciones.action_nick_id IN(".$amisql.") AND news_acciones.action_in IN(".$actions.") ";
$sql .= "GROUP BY news_acciones.action_nick_id ORDER BY newfecha DESC LIMIT 5";

$NovedadesAmigos = mysql_query($sql);

}
?>

Pero el resultado sigue siendo el mismo, me devuelve de ultimo en fecha hacia atras, pero dentro del GROUP BY me saca el primero de cada grupo de registros repetidos, y yo lo que quiero es que respete tambien al ORDER BY DESC

Por si acaso dejo otro codigo que sigue a esto para que tengan idea de lo que hago:
<?php
while($noveam = mysql_fetch_assoc($NovedadesAmigos)){
if(empty($noveam[avatar])){
if($noveam[sexo]==0)
$avatarnove = "http://music-strike.net/tmp/member/sin_foto.jpg";
else
$avatarnove = "http://music-strike.net/tmp/member/sin_foto1.jpg";
}else{
$avatarnove = $noveam[avatar];
}
$actividades = array(
"tema musical" => "comento en el tema",
"dedicatoria" => "dedico una canci贸n a",
"upload-mp3" => "subio el tema",
"add-mp3" => "agrego a su playlist el tema",
"add-playlist" => "agrego a su favoritos el grupo/artista",
);

//estos arrays anteriores son solo para el contenido de los resultados.

$xacti = $noveam[action_in];
$actividad = $actividades[$xacti];
if($xacti=="tema musical"){
$datosnovedad = mysql_query("SELECT id, artista, titulo FROM music_local WHERE id='$noveam[action_id]'");
$dano = mysql_fetch_assoc($datosnovedad);
$danoart = ucwords(str_replace('_',' ',str_replace('-',' ',$dano[artista])));
$danotit = ucwords(str_replace('_',' ',str_replace('-',' ',$dano[titulo])));
$danotitulo = $danoart.' - '.$danotit;
}

//Aqui hago otra consulta con cada resultado para dar un enlace y mostrar donde se ha realizado la actividad. Posteriormente paso a imprimir resultados.

echo '<div class="filanove">';
echo '<div id="img-aminove">';
echo '<a href="usuarios.php?id=registrados&u='.$noveam[action_nick_id].'" title="'.$noveam[nick].'"><img src="'.$avatarnove.'" alt="'.$noveam[nick].'"></a>';
echo '</div>';
echo '<div id="details-aminove">';
echo '<a href="usuarios.php?id=registrados&u='.$noveam[action_nick_id].'" title="'.$noveam[nick].'">'.$noveam[nick].'</a> '.$actividad.' '.$danotitulo;
echo "</div>";
echo '</div>';



}

?>

Espero puedan ayudarme please, ya he buscado en todos lados, pero siempre hay ejemplos de formar grupos con indices o bien con fechas, pero no con nombres de usuarios, ya que este me toma como ordenamiento por letra y no por numero.

Saludos.