Aus der Foren id den Foren Namen + Letztes Post auslesen?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
JLoop©
Mitglied
Beiträge: 291
Registriert: 21.09.2002 15:24

Aus der Foren id den Foren Namen + Letztes Post auslesen?

Beitrag von JLoop© »

Hi,
ich habe mir ein kleines script geschrieben das aus der forum_id in der tabelle phpbb_forums_watch den forennamen aus der phpbb_forums tabelle ausliest so das dieser im template angezeigt wird!Nun würde ich zusätzlich gerne den Letzten Beitrag aus dem jeweiligen Forum anzeigen aber ich habe keine idee wie ich das hinbekommen kann!

Hier mal das script:

Code: Alles auswählen

<?php
/***************************************************************************
* topics.php
* -------------------
* begin : Friday, May 10, 2002
* copyright : (C) 2001 The phpBB Group
* email : support@phpbb.com
*
*
*
***************************************************************************/

/***************************************************************************
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
***************************************************************************/

define('IN_PHPBB', true);
$phpbb_root_path = "./";
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
$page_title = $lang['Topics_created'];
include($phpbb_root_path . 'includes/page_header.'.$phpEx);


$sql="SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name
FROM " . FORUMS_WATCH_TABLE . " fw, " . FORUMS_TABLE . " f
WHERE fw.user_id = '" . $userdata['user_id'] . "' AND fw.forum_id = f.forum_id
ORDER BY f.forum_id";
if ( !$result = $db->sql_query($sql) )
                {
                        message_die(GENERAL_ERROR, 'Error getting forum information', '', __LINE__, __FILE__, $sql);
                }
$numrows = $db->sql_numrows($result);

                if ( $db->sql_numrows($result) > 0)
                {
while ( $row = $db->sql_fetchrow($result) )
                        {
$forum_id = $row['forum_id'];
$forum_name = $row['forum_name'];
 $template->assign_block_vars('abo_info', array(
                                        'FORUM_NAME' => $forum_name,
                                        'U_FORUM' => append_sid('viewforum.php?f='.$forum_id))
                                );
                        }
                        }
                        else
                        {
                        $nothing = "Zurzeit hast du keine Foren abonniert!";
$template->assign_block_vars('abo_info', array(
                                'FORUM_NAME' => $nothing)
                        );
                        }

$template->set_filenames(array(
'body' => 'abo_info.tpl')
);

$template->pparse('body');

include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
?>
Zurzeit sind in der tabelle 2 Foren ids gespeichert es werden also 2 Forennamen angezeigt!
Ich habe schon versucht den query so anzupassen:

Code: Alles auswählen

$sql="SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name, t.topic_id, t.topic_title, t.topic_last_post_id, t.forum_id
FROM " . FORUMS_WATCH_TABLE . " fw, " . FORUMS_TABLE . " f, " . TOPICS_TABLE . " t
WHERE fw.user_id = '" . $userdata['user_id'] . "' AND fw.forum_id = f.forum_id AND t.forum_id !='$forum_id' AND t.topic_last_post_id
ORDER BY f.forum_name DESC";
Dann wird zwar der Letzte Beitrag daneben angezeigt aber der letzte Beitrag aus allen Foren überhaupt und es wird nur noch ein Forenname angezeigt!

Hat jemand ne idee wie ich das lösen kann?
Ich bin für jeden tip dankbar!

Grüße JLoop
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

Dann versuchen wir uns mal etwas in SQL.

Machen wir mal etwas SQL. Fangen wir an, dass Original etwas zu vereinfachen. Machen wir aus den phpBB-Variablen einfach 'nen Tabellennamen und nehmen die user_id als Variable. Das produziert zwar keinen funktionsfähigen Code, sieht aber deutlich übersichtlicher aus :-)

Code: Alles auswählen

SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name
FROM forums_watch_table fw, forums_table f
WHERE fw.user_id = user_id AND fw.forum_id = f.forum_id 
ORDER BY f.forum_id
Ich mag die JOINS deutlich lieber, also setzen wir das ganze mal um:

Code: Alles auswählen

SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name
FROM forums_watch_table fw INNER JOIN forums_table f ON fw.forum_id = f.forum_id
WHERE fw.user_id = user_id
ORDER BY f.forum_id
So, dann holen wir über forum_last_post_id der Foren-Tabelle den letzten Beitrag:

Code: Alles auswählen

SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name, t.*
FROM forums_watch_table fw
    INNER JOIN forums_table f ON fw.forum_id = f.forum_id
    INNER JOIN topics_table t ON f.forum_last_post_id = t.topic_id
WHERE fw.user_id = user_id
ORDER BY f.forum_id
Jetzt müssen wir das ganze nur zurück übersetzen:

Code: Alles auswählen

$sql = "SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name, t.topic_id, t.topic_title
FROM " . FORUMS_WATCH_TABLE . " fw
    INNER JOIN " . FORUMS_TABLE . " f ON fw.forum_id = f.forum_id
    INNER JOIN " . TOPICS_TABLE . " t ON f.forum_last_post_id = t.topic_id
WHERE fw.user_id = " . $userdata['user_id'] . "
ORDER BY f.forum_name DESC"
So, ich hoffe, dass bei der Trocken-SQL-Übung nichts durcheinander geraten ist...

Gruß, Philipp
sidragon
Mitglied
Beiträge: 190
Registriert: 22.07.2002 07:25
Wohnort: Lohr am Main
Kontaktdaten:

Beitrag von sidragon »

Man könnte auch einfach den MOD von Ca5y verwenden ...
http://www.clanunity.net/portal.php
:wink:
vielleicht muss man ja nicht alles selbst neu machen...
JLoop©
Mitglied
Beiträge: 291
Registriert: 21.09.2002 15:24

Beitrag von JLoop© »

thx @ Philipp aber des funzt nicht jetzt wird garnichts mehr angezeigt nichtmal der forenname :(

Gruß JLoop
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

JLoop,

kann's auch nicht. Da hab ich die Topics mit den Posts zusammengeschmissen. Versuch's mal mit:

Code: Alles auswählen

$sql = "SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name, t.*, p.*
FROM " . FORUMS_WATCH_TABLE . " fw 
    INNER JOIN " . FORUMS_TABLE . " f ON fw.forum_id = f.forum_id 
    INNER JOIN " . POSTS_TABLE . " p ON f.forum_last_post_id = p.post_id 
    INNER JOIN " . TOPICS_TABLE . " t ON p.topic_id = t.topic_id 
WHERE fw.user_id = " . $userdata['user_id'] . " 
ORDER BY f.forum_name DESC"
Du solltest beim SELECT-Teil t.* und p.* noch etwas anpassen - dann solltest du (hoffentlich) alle benötigten Infos abgreifen können.

Gruß, Philipp
JLoop©
Mitglied
Beiträge: 291
Registriert: 21.09.2002 15:24

Beitrag von JLoop© »

Hi es funktioniert jetzt zwar aber es wird nur ein Forenname+Last Post angezeigt in der tabelle sind aber 2 felder ( also 2 foren id´s ) gespeichert!Woran kann das liegen?

Es müsste eigentlich so angezeigt werden:
Forum:News Letztes Thema: Update vom 01.10.2002
Forum:Smalltalk Letztes Thema: Flash 5 vs. Swish
aber es wird nur das erste Forum angezeigt so:
Forum:News Letztes Thema: Update vom 01.10.2002
Die sql sieht jetzt so aus:

Code: Alles auswählen

$sql = "SELECT fw.forum_id, fw.user_id, fw.notify_status, f.forum_name, t.topic_id, t.topic_title
FROM " . FORUMS_WATCH_TABLE . " fw
    INNER JOIN " . FORUMS_TABLE . " f ON fw.forum_id = f.forum_id
    INNER JOIN " . POSTS_TABLE . " p ON f.forum_last_post_id = p.post_id
    INNER JOIN " . TOPICS_TABLE . " t ON p.topic_id = t.topic_id
WHERE fw.user_id = " . $userdata['user_id'] . "
ORDER BY f.forum_name DESC";
Grüße JLoop
JLoop©
Mitglied
Beiträge: 291
Registriert: 21.09.2002 15:24

Beitrag von JLoop© »

ahh habs schon selbst hinbekommen thx für deine Hilfe!!

Gruß JLoop
PhilippK
Vorstand
Vorstand
Beiträge: 14662
Registriert: 13.08.2002 14:10
Wohnort: Stuttgart
Kontaktdaten:

Beitrag von PhilippK »

JLoop© hat geschrieben:ahh habs schon selbst hinbekommen thx für deine Hilfe!!
Darf man auch erfahren, woran es lag?

Gruß, Philipp
JLoop©
Mitglied
Beiträge: 291
Registriert: 21.09.2002 15:24

Beitrag von JLoop© »

INNER JOIN hab ich mit LEFT JOIN ersetzt dann ging es :)

Gruß JLoop
Antworten

Zurück zu „Coding & Technik“