Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [MySQL] Problemi nell'ordinare risultati

    Salve!
    Sto creando un sito per la mia classe e ho creato un sistema di chat private.
    Ho bisogno di una pagina in cui vengano mostrati tutte le chat in cui un utente ha il diritto di accesso e per farlo ho utilizzato questo codice:
    Codice PHP:
    // Ottengo dalla tabella "permessi" gli id delle chat autorizzate
    $MySql "SELECT * FROM permessi WHERE idmembro = '$id'";
    $risultati mysql_query ($MySql) or die ( "Si è verificato un errore!");
    while (
    $rs mysql_fetch_array ($risultati)){ 
        
    $chat $rs['idchat'];
    // Dalla tabella "chat" ottengo altre informazioni sulle chat come i membri e la data di ultima modifica
    $MySql2 "SELECT * FROM chat WHERE id = '$chat' ORDER BY chat.modifica DESC ";
    $risultati2 mysql_query ($MySql2) or die ( "Si è verificato un errore!");
    while (
    $rs2 mysql_fetch_array ($risultati2)){ 
        
    $membri $rs2['membri'];
        
    $dataphp $rs2['modifica'];
        
    $data date('d/m H:i:s'$dataphp);
    // All'interno del secondo ciclo stampo le informazioni sulla chat
    echo "[*]<a href=\"chat.php?chat=$chat\">$membri</a> - Ultimo messaggio: $data";

    }

    Il codice funziona bene e mi mostra in effetti l'elenco delle chat abilitate per l'utente in uso.
    Il problema è che vorrei ordinare i risultati secondo l'ultima modifica. La data è registrata nella tabella chat nel campo modifica, tipo INT sotto formato Unix Time.
    Essendo quindi la data salvata in un formato numerico progressivo pensavo che ordinando i risultati del secondo ciclo per "chat.modifica DESC" potessi ottenere il risultato sperato. Invece nella pagina non tiene conto di questo ordinamento.
    L'unico modo per ordinarli è attraverso il primo ciclo ma da quello non riesco ad ottenere la data dell'ultima modifica, quindi non va bene...
    Come posso risolvere? Ho fatto qualche errore (molto probabile!)?

    Grazie mille in anticipo!
    Andrea

  2. #2
    dalla prima query ottieni l'elenco delle chat (idchat)
    Ovviamente se poi fai tante query per ognuno degli id otterrai alla fine un ordinamento per id, data mentre tu vorresti avere un ordinamento per data a prescindere dalla chat. Almeno cosi' mi pare di capire.

    Devi semplicamente raccogliere tutti gli idchat in un array e presentarlo con IMPLODE a IN() nella seconda (ed unica seconda) query.

    codice:
    $MySql = "SELECT idchat FROM permessi WHERE idmembro = '$id'"; 
    $risultati = mysql_query ($MySql) or die ( "Si &egrave; verificato un errore!");
    while ($rs = mysql_fetch_assoc($risultati)){ 
        $chat[] = $rs['idchat'];
        }
    ....
    
    $id = implode($chat);
    
    $MySql2 = "SELECT * FROM chat WHERE id IN( '$chat') ORDER BY chat.modifica DESC ";
    Non so se servono o meno gli apici a ('$chat') se non va con, prova senza.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    Grazie, ho risolto così! In realtà c'era qualche errore perché facendo così l'implode unisce i risultati senza spazi e quindi mostra un id errato. Inoltre era sbagliata la variabile.

    Comunque per completezza ecco il codice che funziona!

    Codice PHP:
    $MySql "SELECT idchat FROM permessi WHERE idmembro = '$id'"
    $risultati mysql_query ($MySql) or die ( "Si &egrave; verificato un errore!");
    while (
    $rs mysql_fetch_assoc($risultati)){ 
        
    $chat[] = $rs['idchat'];
        }

    $tempchat implode(", "$chat);

    $MySql2 "SELECT * FROM chat WHERE id IN($tempchat) ORDER BY chat.modifica DESC "
    $risultati2 mysql_query ($MySql2) or die ( "Si &egrave; verificato un errore!");
    while (
    $rs2 mysql_fetch_array ($risultati2)){ 
        
    $idchat $rs2['id'];
        
    $membri $rs2['membri'];
        
    $dataphp $rs2['modifica'];
        
    $data date('d/m H:i:s'$dataphp);
    echo 
    "[*]<a href=\"chat.php?chat=$idchat\">$membri</a> - Ultimo messaggio: $data";


    Grazie mille!
    Andrea

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.