Pagina 1 di 3
[risolto] recupero informazioni post
Inviato: 16/07/2011, 10:23
da mae89
Ciao a tutti...
Sto scrivendo uno script per il recupero degli ultimi 5 post inseriti nel mio forum (evitando doppioni di titoli)... lo script è pronto:
Codice: Seleziona tutto
<?php
echo "<ul>";
mysql_connect($db_host,$db_user,$db_pass)or die("non riesco a connettermi");
mysql_select_db($database_name)or die("non riesco selezionare il database");
$sql = "SELECT DISTINCT post_subject, forum_id,topic_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";
$dati=mysql_query($sql);
while ($fetchM=mysql_fetch_row($dati))
{
$nome_post=$fetchM[0];
$forum_id=$fetchM[1];
$topic_id=$fetchM[2];
$sql1 = "SELECT forum_name,forum_image FROM phpbb_forums WHERE forum_id = $forum_id";
$dati1=mysql_query($sql1);
while ($fetchM1=mysql_fetch_row($dati1))
{
echo '<li><a href="/new/forum//viewtopic.php?f='.$forum_id.'&t='.$topic_id.'#p'.$post_id.'"\><img src="new/forum/' .$fetchM1[1]. '" style="vertical-align: middle;" alt="avatar" height="20" width="20" > '.$fetchM1[0].' - '.$nome_post.'</a><br/></li>';
}
}
//fine modifica
echo "</ul>";?>
e questo script svolge ottimamente il suo dovere (se volete vederlo in azione premente
qui) ma il problema sorge quando voglio che ogni titolo del post,sia anche un link diretta a quel post...
ora, come l'ho scritto io, il titolo del post mi porta al forum. Il problema sta che non riesco ad estrapolare la variabile del post stesso...
Quindi dovrei riuscire ad estrarmi anche
post_id da
Codice: Seleziona tutto
$sql = "SELECT DISTINCT post_subject, forum_id,topic_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";
poiche se io inserisco:
$sql = "SELECT DISTINCT post_subject, forum_id,topic_id,
post_id FROM phpbb_posts ORDER BY post_id DESC LIMIT 0, 5";
ovviamente i doppioni non si eliminano piu....
vi ringrazio in anticipo
Re: recupero informazioni post
Inviato: 16/07/2011, 11:09
da Carlo
Intendi estrarre 1 post per discussione?
Re: recupero informazioni post
Inviato: 17/07/2011, 0:56
da mae89
mmm circa...
lo script, preleva gli ultimi 5 post, appartenenti a post diversi, in ordine cronologico. con questo sistema ottengo gli utlimi 5 topic dove è stato aggiunto qualcosa. ma per collegare questo dato, all'ultimo post mi serve il post_id.... che non riesco a prelevarlo con lo script precedente...
idee?
Re: recupero informazioni post
Inviato: 06/08/2011, 15:30
da mae89
nessuno saprebbe aiutarmi?
Re: recupero informazioni post
Inviato: 06/08/2011, 15:38
da Micogian
La
Mod Topten_Topics estrae gli ultimi 10 Topics, i 10 più letti e i 10 ultimi posts.
Adattarla a 5 Posts è una sciocchezza.
Re: recupero informazioni post
Inviato: 06/08/2011, 15:41
da mae89
si ma la mia intenzione era scrivere uno script dato che mi serve importare queste informazioni in joomla...
Re: recupero informazioni post
Inviato: 06/08/2011, 16:25
da Micogian
mae89 ha scritto:si ma la mia intenzione era scrivere uno script dato che mi serve importare queste informazioni in joomla...
Perchè, nella Mod non è uno script ? è php.
EDIT:
a parte che ci sono altri modi per selezionare solo l'ultimo post di un Topic, la soluzione più semplice è quella di interrogare la tabella "topics", non "posts" e quindi senza bisogno del DISTINCT.
Nella tabella "topics" trovi, oltre al topic_id, "topic_last_post_id" e "topic_last_poster_id", quindi tutto quello che ti serve.
Nella Mod Topten_Topics funziona così.
Re: recupero informazioni post
Inviato: 06/08/2011, 20:18
da davide cangiamila
Codice: Seleziona tutto
<?php
mysql_connect($db_host,$db_user,$db_pass)or die("non riesco a connettermi");
mysql_select_db($database_name)or die("non riesco selezionare il database");
$max = 20; //Ultimi N post da visualizzare
mysql_query("SET CHARACTER SET 'utf8'");
mysql_query("SET NAMES 'utf8'");
$query = "SELECT phpbb_topics.topic_id, phpbb_topics.forum_id, phpbb_topics.topic_last_post_id, FROM_UNIXTIME( phpbb_topics.topic_last_post_time) as last_post_time, phpbb_topics.topic_title, phpbb_topics.topic_first_poster_name, phpbb_topics.topic_last_poster_colour, phpbb_topics.topic_last_poster_name, phpbb_forums.forum_name, phpbb_forums.forum_image
FROM phpbb_topics
RIGHT JOIN phpbb_forums ON phpbb_topics.forum_id = phpbb_forums.forum_id
WHERE phpbb_forums.forum_id = 18 ORDER BY topic_last_post_time DESC LIMIT 0,$max";
//qui sopra puoi optare se estrarre i post da tutti i forum o solo da alcuni, puoi usare anche u paret_id
//WHERE phpbb_forums.parent_id != 121 or phpbb_forums.parent_id != 91 ORDER BY topic_last_post_time DESC LIMIT 0,$max";
$risultato = mysql_query($query);
if (!$risultato) {
echo "Fallimento nell'esecuzione della query ($query) dal DB: " . mysql_error();
exit;
}
if (mysql_num_rows($risultato) == 0) {
echo "Nessuna riga trovata, niente da stampare quindi si esce";
exit;
}
while ($dati = mysql_fetch_assoc($risultato)) {
$data_ultimo_post=@$dati[last_post_time];
$data_post=date ("d-m-Y", strtotime ($data_ultimo_post));
$ora_post=date ("H:i", strtotime ($data_ultimo_post));
//$test=time_to_eur($data_ultimo_post);
echo '
<a href="forum/viewforum.php?f='.@$dati[forum_id].'">
<img src="img/tpl/articoli.png" style="float:left; margin-left:5px" />
</a>
<span class="autore">Scritto da:<a href="forum/memberlist.php?mode=viewprofile&un='.@$dati[topic_last_poster_name].'">
'.$dati[@topic_last_poster_name].'
</a> il '.$data_post.' alle '.$ora_post.'</span><br />
<h3 class="link"><a href="forum/viewtopic.php?f='.@$dati[forum_id].'&t='.@$dati[topic_id].'#p'.@$dati[topic_last_post_id].'">'.@$dati[topic_title].'</a></h3>
<br />
';
}
mysql_free_result($risultato);
?>
Re: recupero informazioni post
Inviato: 07/08/2011, 14:07
da Carlo
bingo ha scritto:a parte che ci sono altri modi per selezionare solo l'ultimo post di un Topic, la soluzione più semplice è quella di interrogare la tabella "topics", non "posts" e quindi senza bisogno del DISTINCT.
Nella tabella "topics" trovi, oltre al topic_id, "topic_last_post_id" e "topic_last_poster_id", quindi tutto quello che ti serve.
Nella Mod Topten_Topics funziona così.
Infatti come detto da bingo, nella tabella degli argomenti (
prefisso_topics), per ogni argomento viene riportato, se non erro, l'ID dell'ultimo messaggio.
Re: recupero informazioni post
Inviato: 07/08/2011, 16:35
da Micogian
Certo che c'è l'ID dell'ultimo messaggio nella tabella prefix_topics, è
topic_last_post_id
Lo script della Mod Topten Topics tiene conto anche dei permessi di lettura, quindi estrae un numero superiore di records per poi controllarli e terminare al raggiungimento del numero fissato per la lista.
Codice: Seleziona tutto
$list_rec = 20 ;
//---------- 10 Ultimi posts start -----------//
$sql4 = "SELECT tt.topic_id, tt.forum_id, tt.topic_moved_id, tt.topic_last_post_id, tt.topic_last_poster_id, tt.topic_last_poster_name, tt.topic_last_post_subject, tt.topic_last_post_time,
ft.forum_id, ft.forum_name
FROM " . TOPICS_TABLE . " tt, " . FORUMS_TABLE . " ft
WHERE tt.topic_type = 0
AND tt.topic_moved_id = 0
AND tt.forum_id = ft.forum_id
ORDER BY tt.topic_last_post_time DESC LIMIT 0,$list_rec";
$result4 = $db->sql_query($sql4);
$n4 = 0;
while ($row4 = $db->sql_fetchrow($result4))
{
if ($auth->acl_get('f_read', $row4['forum_id']) == 1)
{
if ($n4 < $list_view)
{
$post_subject = str_replace("Re: ", "", $row4['topic_last_post_subject']) ;
if (strlen($post_subject) > 28)
{
$post_title = substr($post_subject,0,25) . "...";
}else{
$post_title = $post_subject ;
}
$last_post_link[$n4] = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=" . $row4['forum_id'] . "&t=" . $row4['topic_id'] . "#p" . $row4['topic_last_post_id']);
$last_post_title[$n4] = $row4['topic_last_post_subject'];
$last_post_title_short[$n4] = $post_title;
$last_post_forum[$n4] = $row4['forum_name'];
$last_post_author[$n4] = $row4['topic_last_poster_name'];
++$n4 ;
}else{
break ;
}
}
}
//---------- 10 Ultimi posts end -----------//
Ovviamente la query lavora in ambiente phpbb e quindi non necessita della connessione al DB che c'è già.
Anche le variabili TOPIC_TABLE e FORUM_TABLE sono ricavata da phpbb.
In alternativa basta aggiungere lo script di connessione e sostituire le variabili TABLE con i nomi delle tabelle.