• User Newbie

    Ultimo post di specifico utente

    Salve ragazzi,
    sto cercando di esportare su Wordpress gli utenti online di SMF. In parte è stato semplice, ma mi è venuta l'idea di far corrispondere a ogni utente online SMF visualizzato su Wordpress l'ultimo topic in cui hanno postato con il link al post.
    Mi sono bloccato e proprio non riesco ad andare avanti. Tutte le prove che faccio, mi danno come risultato l'ultimo post in assoluto inserito nel forum.

    Eccovi il codice:

    $link = Mysql_connect ('xxxx', 'xxxx', 'xxxx') or die ( 'Errore del database: ' . Mysql_error ());
        mysql_select_db('smf') or die('Could not select database');
        $query = 'SELECT
                lo.ID_MEMBER, lo.logTime, mem.realName, mem.memberName, mem.showOnline,
                mg.onlineColor, mg.ID_GROUP, mg.groupName, mem.avatar, mem.posts, mes.ID_MEMBER, mes.ID_MSG, mes.subject, mes.ID_TOPIC
            FROM smf_log_online AS lo
                LEFT JOIN smf_members AS mem ON (mem.ID_MEMBER = lo.ID_MEMBER)
                LEFT JOIN smf_membergroups AS mg ON (mg.ID_GROUP = IF(mem.ID_GROUP = 0, mem.ID_POST_GROUP, mem.ID_GROUP)),
                ';
        $result = mysql_query($query) or die('Query failed: ' . mysql_error()); ?>
    

    Ora non riesco a inserire le colonne di smf_messages (con alias mes.) all'interno del contesto, richiamando la taballe smf_messages.
    O meglio, la inserisco dopo LEFT JOIN smf_membergroups in questo modo:

    LEFT JOIN smf_messages AS mes ON ( mem.ID_MSG_LAST_VISIT = mes.ID_MSG)
    

    ma il risultato - ahimè! - è l'ultimo post inserito in assoluto. Se poi richiamo direttamente mes.ID_MSG in questo modo:

    LEFT JOIN smf_messages AS mes ON mes.ID_MSG
    

    Il risultato è che per ogni utente online mi visualizza tutti i post per quell'utente.

    Ma eccovi in php come ho tradotto:

    
    <?php  while ($linex = mysql_fetch_array($result, MYSQL_ASSOC))
    {
        if ($linex['ID_MEMBER'] > 0) 
        {
        
                echo "\t<table id=\"tablemain\" width=\"95%\"><tr>\n";
                
                // show username & color user
                echo "\t<td valign=\"top\" class=\"table2\"><a style=\"color:".$linex['onlineColor'].";\" href=\"urlsito/index.php?action=profile;u=". $linex['ID_MEMBER'] ."\">". $linex['memberName'] ."</a><br/>
                    <span>".$linex['groupName']."</span></td>\n";
                
                // show last post user
                echo "\t<td valign=\"top\" class=\"table3\">Ultimo post inserito in:<br/>
                    <span><a href=\"urlsito/index.php?topic=". $linex['ID_TOPIC'] .".msg".$linex['ID_MSG']."#msg".$linex['ID_MSG']."\">".substr($linex['subject'],0,30)."</a></span></td>\n";
                
                echo "\t</tr></table>\n";
        }
        else {
                echo "nessun utente registrato nel forum";
        }
    }
    
    ?>
    
    

    Qualche suggerimento? Ho cercato un po' dappertutto, ma non ho trovato nulla. Essendo peraltro un neofita di php, ovviamente non riesco a intuire ancora bene l'uso delle funzioni e la manipolazione delle query. So per certo che si deve usare LEFT JOIN o INNER JOIN, oppure una semplice funzione PHP di filtraggio, ma non riesco a individuarla.
    Vi ringrazio anticipatamente per l'aiuto. 🙂


  • ModSenior

    Ciao,

    Devi semplice mettere un WHERE id_utent = '$id'.


  • User Newbie

    Grazie della risposta... Ho provato. Ho inserito in questo modo:

    
    ...
    LEFT JOIN smf_messages AS mes ON ( mem.ID_MSG_LAST_VISIT = mes.ID_MSG)
    WHERE mem.ID_MEMBER = \'$id\'
    ...
    
    

    Ora, però non so come richiamare $id.
    Ho provato a sostituirlo nella condizione if al post di ID_MEMBER (che corrisponde al tuo id_utent):

    
    da 
     ... if ($linex['ID_MEMBER'] > 0) ...
    a
     ... if ($linex['$id'] > 0) ...
    
    
    

    Ma a questo punto, sono scomparsi gli utenti in linea...😊