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

    Problema ordinamento post

    Ciao,

    ho creato per un sito un mini social, la parte su cui mi servirebe un'aiuto è la creazione di una pagina home stile facebook. Ogni utente ha la propria bacheca e su questa pagina home dovrebbero comparire tutti i post pubblicati dagli amici di un utente eventualmente usando un criterio di data: per esempio i post pubblicati negli ultimi 3 giorni.
    Ovviamente i dati sono prelevati da DB. Ho una tabella in cui registro le amicizie tramite gli id. Per capirci: se tizio è l'utente con id uguale a 1 e caio è l'utente 2 e questi sono amici, nella tabella delle amicizie avrò 2 entry per registrare che tizio è amico di caio e viceversa.
    Per la pagina home faccio quanto segue:

    Codice PHP:
    // Vado nella tabella delle amicizie e prelevo gli id dei miei amici
    $query_elenco="SELECT * FROM social_amicizie WHERE id_utente ='$_SESSION[user_id]';";
    $result_elenco=mysql_query($query_elenco) or die ("impossibile eseguire: $query_elenco");
    while(
    $row_elenco=mysql_fetch_array($result_elenco)){
    // Prendo gli id degli amici dell'utente di sessione    
        
    $id_amico=$row_elenco[id_amico];
        
    $vettori_id=$vettori_id.",".$id_amico;
    }
        
    $vettori_id=substr($vettori_id1);
        
    $vet=explode(",",$vettori_id); 
    mi costruisco un vettore con gli id degli amici di un utente. Mi creo un criterio sulla data, quello che poi faccio è fare un ciclo sugli id e prelevare dalla tabella dei post quelli scritti dall'utente con l'id selezionato in $vettore. Il codice è:

    Codice PHP:
    foreach($vet as $val) {
    $query_post="SELECT * FROM social_messaggi WHERE (id_autore='$val' AND tipo_msg='a_tutti') AND (data_invio>=$meno_3 OR data_invio<=$today) ORDER BY data_invio DESC";
    $result_post=mysql_query($query_post) or die ("impossibile eseguire: $query_post");
    while(
    $row_post=mysql_fetch_array($result_post)) { 
        
    $post=$row_post[msg];
        
    $data=$row_post[data_invio];
        echo 
    "$post 
    "
    ;
    // Recupero i dati di chi l'ha scritto
        
    $autore=funzione_utente($val); //è una function per recuperare i dati anagrafici dell'autore del post            
        
    echo "Pubblicato il [b]$data[/b] 
    "
    ;
        echo 
    "da [b]$autore[1] $autore[2] [/b]
    "
    ;
        echo 
    "------------ 
    "
    ;
    }

    in questo modo però ottengo i post scritti da caio ordinati per data, poi quelli di tizio ordinati per data. Con questo modo recupero a gruppi i post.
    C'è un modo per recuperare in un unica volta i post degli amici di un dato utente e ordinarli globalmente per data?
    spero di essere stato chiaro.
    grazie.
    PeppePegasus

  2. #2
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, utilizza una query di join tra la tabella del singolo utente e la tabella che contiene gli amici, la ricerca sarà effettuata tramite l'id.

  3. #3
    ciao,

    potresti farmi un esempio? non ho mai usato la join e non saprei come usarla.
    ti dico la struttura delle 2 tabelle:
    tab post:
    id id_autore tipo_msg id_destinatario titolo msg data_invio
    tab amicizie:
    id id_utente nick_richiedente id_amico nick_amico
    riesci a costruire un esempio di query che si avvicini alle mie esigenze?
    grazie mille.
    PeppePegasus

  4. #4
    Utente di HTML.it L'avatar di jcsnake
    Registrato dal
    Jun 2010
    Messaggi
    629
    Ciao, se non ho capito male a te serve visualizzare tutti i post degli amici di una data persona. Quindi immagino tu abbia una variabile $id che rappresenta l'utente loggato, per cui tu vuoi visualizzare i post degli amici.

    Codice PHP:
    $strsql="Select * from post inner join amicizie on post.id_autore=amicizie.id_amico where amicizie.id_utente=$id order by data_invio"
    Questa è la stringa della query mysql che dovrebbe permetterti di risolvere il tuo problema, non l'ho testata quindi fammi sapere. Inoltre ho fatto una select di tutto (tramite *) mentre se tu volessi proiettare solo alcuni campi della tabella post,basta che li inserisci in cascata.

  5. #5
    ciao,

    grazie mille per la dritta..sembra funzionare ma devo controllare per bene se mi pesca solo i messaggi che mi servono.
    grazie.
    ciao.
    PeppePegasus

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.