Usando il DB, ho già il sistema pronto! Siccome non vorrei "sfottere" troppo il DB per queste cose, soprattutto perché utilizzo query simili:
Codice PHP:
$sql = 'SELECT topic_id, topic_title, topic_open_u, topic_status, topic_time, topic_views,
tu.user_name,
ru.user_name AS reply_username,
COUNT(DISTINCT cr.post_id) AS topic_replies,
lp.post_id AS last_post, lp.post_time, lp.post_poster,
up2db_status
FROM ' . TOPICS_TABLE . '
LEFT JOIN ' . USERS_TABLE . ' tu
ON (topic_open_u = tu.user_id)
LEFT JOIN ' . POSTS_TABLE . ' cr
ON (cr.post_t = topic_id)
LEFT JOIN ' . POSTS_TABLE . ' lp
ON (lp.post_id = (SELECT MAX(pt.post_id)
FROM ' . POSTS_TABLE . ' AS pt
WHERE pt.post_t = topic_id
GROUP BY pt.post_t))
LEFT JOIN ' . USERS_TABLE . ' ru
ON (lp.post_poster = ru.user_id)
LEFT JOIN ' . UP2DB_TABLE . '
ON (up2db_topic = topic_id)
AND (topic_f = ' . $row['forum_id'] . ')' .
($user->data('logged') ? 'AND (up2db_user = ' . $user->data('id') . ')
AND (up2db_update > ' . (time() - 86400) . ')' : '') . '
WHERE topic_f = ' . $row['forum_id'] . '
GROUP BY topic_id
ORDER BY up2db_status DESC, topic_last_update, topic_time';
Poi con le condizioni mostor quel che devo! Con un'altra query invece pulisco ed elimino tutti i record che sono minori di (time() - 86400) in questo modo tengo pulita anche la tabella e mostro il messaggio come, ormai, letto.
Grazie in ogni caso