- Home
- Categorie
- Coding e Sistemistica
- PHP
- Ultimo post di specifico utente
-
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.
-
Ciao,
Devi semplice mettere un WHERE id_utent = '$id'.
-
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...