forum_name aus Datenbank auslesen und (Join - 2 Tabellen)

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
cpg
Mitglied
Beiträge: 532
Registriert: 24.11.2007 12:43
Kontaktdaten:

forum_name aus Datenbank auslesen und (Join - 2 Tabellen)

Beitrag von cpg »

Moin,

ich möchte gern aus der Datenbank den jeweiligen forum_name neben topic_title, forum_id...usw. auch noch auslesen. Der ist in einer anderen Tabelle :)
Mit der "JOIN"- Geschichte komme ich irgendwie nicht ganz zurecht. Kann mir bitte jemand einen Schritt weiter helfen?
Ich möchte letztendlich zu einem verwertbaren forum_name kommen, der neben den anderen gezeigten Angaben (topic_id und forum_id) angezeigt werden kann. In meinen zusammengebastelten Zeilen ist ein Fehler. Die Meldung besagt: "Column 'forum_id' in field list is ambiguous [1052"]"
und "Bitte kontaktiere die Board-Administration" Aber die Board-Administration (ich) kommt im Moment nicht so richtig weiter und würde sich über einen "Anstoß" freuen.

Code: Alles auswählen

$sql = 'SELECT topic_title, forum_id, topic_views, topic_id, f.forum_name 
                        FROM ' . TOPICS_TABLE . ' t
                       LEFT JOIN ' . FORUMS_TABLE . ' f
			ON f.forum_id = t.forum_id

Gruß
CPG
Zuletzt geändert von cpg am 17.04.2014 23:36, insgesamt 1-mal geändert.
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von Miriam »

Du mußt die Aliase auch im SELECT konsequent nutzen, denn forum_id ist in beiden angesprochenen Tabellen vorhanden. Bspw. so: t.forum_id, wenn Du die ID aus der Thementabelle benutzen möchtest.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
cpg
Mitglied
Beiträge: 532
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von cpg »

Guten Morgen,

und vielen Dank für die Antwort.
Im Moment kann ich mich da nicht so gut reindenken, weiß also nicht, wie ich forum_name zu fassen bekomme.
Die ID benötige ich nicht für meine Aufgabe; die wird in beiden Tabellen gleich sein.
Ich will nur später nicht nur "Beitrag im Forum 33" für die UserInnen ausgeben, sondern: "... ein Beitrag im Forum "Politik".
"Politik" ist im Beispiel Forum 33

Ich habe mal selbst kleine Datenbank- und php Anwendungen geschrieben; aber ohne Verbindung von zwei Tabellen.
Vielleicht sollte ich mir die Grundsätze dafür noch einmal erarbeiten :)
Trotzdem habe ich noch eine (sicherlich blöde Frage): was hat es mit t.forum und f.forum auf sich?
... dann verstehe ich es sicherlich mehr.

Gruß und danke
cpg
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von Miriam »

Code: Alles auswählen

$sql = 'SELECT t.topic_title, t.forum_id, t.topic_views, t.topic_id, f.forum_name 
                        FROM ' . TOPICS_TABLE . ' t
                       LEFT JOIN ' . FORUMS_TABLE . ' f
         ON f.forum_id = t.forum_id';
Und Du solltest vllt. auch noch eine WHERE Bedingung einpflegen.

Das Ganze sollte aber auch ohne JOIN machbar sein.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
cpg
Mitglied
Beiträge: 532
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von cpg »

Moin,

es folgte:

Code: Alles auswählen

WHERE topic_approved = 1  
Aber das wird nicht mehr stimmen, denn ich bekomme die Fehlermeldung
Parse error: syntax error, unexpected 'topic_approved' (T_STRING)
Gruß
cpg
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von Miriam »

Dann solltest Du die Syntax einhalten, wenn Du die Variable $sql erweiterst / anpaßt.
Sollte es nicht eher t.topic_approved heißen?
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
cpg
Mitglied
Beiträge: 532
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von cpg »

Moin,

letzte Frage heute :)
Danke für Deine Geduld.
Was bedeutet das "t" oder "f" bei z.B. f.forum_name

Gruß
cpg
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von Miriam »

Das ist der Tabellen-Alias, den Du für die Tabelle, die Du ansprichst bzw. die angesprochen werden soll vergeben hast.
Der Sinn besteht darin,
  • die Query lesbarer zu machen,
    sich selbst Schreibarbeit zu ersparen,
    gleiche Spaltennamen in den verschiedenen Tabellen eindeutig ansprechen zu können.
Das wären so ziemlich die wichtigsten.

Du kannst das Keyword AS weglassen.
Du kannst auf einen Alias verzichten, wenn nur ungleiche Spaltennamen in den angesprochenen Tabellen vorhanden sind oder wenn nur eine Tabelle angesprochen wird.

Bsp.:

Code: Alles auswählen

SELECT alias1.columnA, alias2.columnA FROM table1 AS alias1, table2 AS alias2
Die Tabellen haben beide eine Spalte namens columnA und trotzdem gibt es keinen Streß.

Deine Query könnte so aussehen:

Code: Alles auswählen

SELECT t.topic_id, f.forum_name 
FROM phpbb_topics t, phpbb_forums f 
WHERE t.forum_id = f.forum_id
ORDER BY t.topic_id
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
cpg
Mitglied
Beiträge: 532
Registriert: 24.11.2007 12:43
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von cpg »

Moin,

ich habe es dann doch endlich begriffen...
... und auf meinem lokalen System lief es wunderbar.
Dann habe ich noch ein wenig "Schrott" gelöscht - von meinen Versuchen.
Immer wieder überprüft und es war immer alles ok!
Dann kam der große Augenblick: Austausch der Datei in meinem laufenden Forum. Ich weiß, das sollte man eigentlich nicht machen, aber eine Störung von wenigen Sekunden ist sicherlich kein Problem und ich wollte nicht extra wegen "Wartungsarbeiten" schließen.
Nach dem Austausch habe ich das Board aufgerufen - und was soll ich sagen?
Wieder die Fehlermeldung, die besagt: "Column 'forum_id' in field list is ambiguous [1052"]"
Schnell wieder die "alte" Datei zurückgespielt.
Nochmals meine überarbeitete Version im loklalen System überprüft: wieder alles ok!
Dann habe ich die Datei in einem anderen Board, das ich mehr oder weniger für Versuchszwecke betreibe, hochgeladen - und mich gewundert; denn hier funktioniert alles, wie es soll.

Wieder einmal eine Angelegenheit, über die ich mich wundern kann/muss. (Tücken der Technik)
Vielleicht liegt es an den unterschiedlichen MySQL-Versionen. Die auf meinem Haupt-Forum ist (leider) schon recht alt.
Ich werde berichten.
Die Forum-Versionen sind aktuell und identisch - auch mit sonstigen, von mir vorgenommenen Modifikationen und Ergänzungen.

Gruß und guten Start ins Oster-Wochenende
cpg
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen

Beitrag von Miriam »

Du hast aber den Foren-Cache im ACP auch geleert? Also NACH dem Austausch der Datei.
Das kannst Du auch gern per FTP machen: Lösche alle Dateien bis auf .htaccess und index.htm, die sich im Verzeichnis /cache befinden.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“