Seite 1 von 2
forum_name aus Datenbank auslesen und (Join - 2 Tabellen)
Verfasst: 17.04.2014 20:13
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
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 17.04.2014 22:13
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.
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 11:03
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
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 12:06
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.
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 13:44
von cpg
Moin,
es folgte:
Aber das wird nicht mehr stimmen, denn ich bekomme die Fehlermeldung
Parse error: syntax error, unexpected 'topic_approved' (T_STRING)
Gruß
cpg
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 14:36
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?
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 17:01
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
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 18.04.2014 18:00
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
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 19.04.2014 07:47
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
Re: forum_name aus Datenbank auslesen und (Join - 2 Tabellen
Verfasst: 19.04.2014 08:59
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.