php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 02.03.2008, 14:36  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard JOIN Problem

Ich habe eine Tabelle Namens foren_threads. In der sind für mein Forum alle Beiträge, also Themen und deren Antworten gespeichert.
Nun möchte ich auf der Hauptseite meines Forums (Forenübersicht), dass zu jedem Forum der jeweils letzte Beitrag gelistet wird.
Mein Problem bei der Sache ist, dass wenn ein Thema eine oder mehrere Antworten hat, kein Titel auf der Hauptseite angezeigt wird.
Der Titel ist allerdings nur im Thema verankert. Bei den dazugehörigen Antworten bleibt die Titelspalte leer.

Meine Tabelle foren_threads sieht so aus:
ID
ForenID
ThreadID
PostID
Titel
Text
BenutzerID
geschlossen
Hits
erstellt

Hier meine Join Abfrage:
PHP-Code:
$sql "SELECT Themen.ID, 
Themen.ForenID, 
Themen.ThreadID, 
Themen.BenutzerID, 
Themen.Titel, 
DATE_FORMAT(Themen.erstellt, '%e.%c.%y um %k:%i') AS Erstellt,
BenutzerName,
BenutzerStatus,
Antworten.PostID
FROM foren_threads AS Themen
LEFT JOIN foren_threads AS Antworten
ON Antworten.ThreadID = Themen.ID
JOIN benutzer
ON Themen.BenutzerID = benutzer.BenutzerID
WHERE Themen.ForenID = :0
ORDER BY Themen.erstellt
DESC
LIMIT 1"
;

$stmt $this->dbh->vorbereiten($sql);
$stmt->ausfuehren($forenid); 
Irgendwie stehe ich hier auf der Leitung was mit meinem Join nicht stimmt, damit ich ich auch bei Antworten meinen Titel zum dazugehörigen Thema bekomme.
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 02.03.2008, 19:47  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo pPanther,

sicher kann man das irgendwie lösen. Problem dabei ist jedoch, dass dein Datenmodell nicht wirklich schön ist. Versuche das mal zu normalisieren, bzw. sauber aufzuziehen, so dass man in einem Forum einen Thread hat, der wiederum mehrere Posts hat. Der initiale Post muss dabei eine weitere Beziehung (firstPost) zum Thread haben. Damit kannst du das Titel-Problem sauber lösen.

Poste bitte mal das ER-Diagramm, vielleicht können dir andere besser helfen.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 03.03.2008, 17:40  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

ER - Diagramm? Ich habe gerade mal im Internet nachgeschaut, da ich den Begriff das erste mal lese. Aber egal.

Jetzt zum Forum. Das ganze ist so aufgebaut, dass ich eine Tabelle habe wo meine Foren drinnen stehen. Dann eine weitere wo meine Beiträge reinkommen, also auch die Antworten.
Die ID Spalte ist ein auto_increment Wert.
Wird ein neuer Thread erstellt, so gleichen sich die ThreadID und die ID. Wird auf ein Thema eine Antwort erstellt, so werden die Antworten mit dem Thread mittels ThreadID verbunden. Die PostID ist eigentlich nur ne fortlaufende Nummerierung meiner Antworten, damit ich von anderen Seiten direkt zur letzten Antwort springen kann.
Da ich gestern noch rumprobiert und nach einer Lösung gesucht habe, ist mir selbst in den Sinn gekommen, dass ich das nicht wirklich sauber gelöst habe.
Inzwischen habe ich es so gemacht, dass der Thementitel auch bei jeder Antwort mit in den Datensatz gespeichert wird (statt bisher nur leeres Feld). Beim ändern des Thementitels ändert er einfach alle dazugehörigen Antworten mit.
Irgendwie habe ich aber das Gefühl, dass auch das nicht optimal ist. Besser währe es doch, wenn der Titel nur einmal in der DB steht oder? Also wenn ich Antworten und Themen in 2 Tabellen aufteile und mittels Schlüssel verbinde.

Danke erstmal für die Hilfe
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline   Mit Zitat antworten
Alt 04.03.2008, 12:28  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo pPanther,

ER-Diagramm sollte dir schon ein Begriff sein, sonst muss ich dir unterstellen, dass du vor dem Beginn der Programmierung nie eine Applikatin auf Datenebene designed hast. Man sollte immer erst eine Lösung modellieren um zu sehen, ob diese für die von dir beschriebenen Anwendungsfälle auch tauglich ist.

Wie du selbst beschreibst, ist die Lösung nicht optimal. Das sehe ich genauso. Ich würde ein Forum folgendermaßen vom Tabellen-Layout designen (hab ich in 5Min gezeichnet):




Hier nicht inkludiert ist das Thema Gruppe und Zuordnung von Gruppen und Benutzern zu Foren im Sinne von Moderatoren etc. Die Struktur sollte dir jedoch eine Idee geben, wie man sowas um setzen kann.

[img]Forum_DataModel_pPanther.png[/img]Hallo pPanther,

ER-Diagramm sollte dir schon ein Begriff sein, sonst muss ich dir unterstellen, dass du vor dem Beginn der Programmierung nie eine Applikatin auf Datenebene designed hast. Man sollte immer erst eine Lösung modellieren um zu sehen, ob diese für die von dir beschriebenen Anwendungsfälle auch tauglich ist.

Wie du selbst beschreibst, ist die Lösung nicht optimal. Das sehe ich genauso. Ich würde ein Forum folgendermaßen vom Tabellen-Layout designen (hab ich in 5Min gezeichnet):



Hier nicht inkludiert ist das Thema Gruppe und Zuordnung von Gruppen und Benutzern zu Foren im Sinne von Moderatoren etc. Die Struktur sollte dir jedoch eine Idee geben, wie man sowas um setzen kann.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 05.03.2008, 18:11  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

Du kannst es mir ruhig unterstellen, denn es ist wahr. Ich habe noch nie sowas vorher designed bzw. gezeichnet.

Vor nem Jahr habe ich noch nicht mal gewusst was OOP ist. Ich programmiere weils mir Spaß macht wann immer ich Zeit habe. Von Zeit zu Zeit bemkerke ich selbst was ich fürn Mist verzapft habe. Und als "Anfänger" macht man sehr viele Fehler. Dann probier ich zuerstmal selbst, das Problem zu lösen. Aber immer gelingt es mir nicht.

Ich muss ehrlich zugeben, dass ich dein Diagramm nicht ganz durchschaue, aber ich werde mich in nächster Zeit mit diesem Thema beschäftigen.

Danke für deine Hilfe.

Achja, noch was.
Kannst du mir ein gutes MySQL 5 Buch für Anfänger/Fortegschrittene empfehlen?
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline   Mit Zitat antworten
Alt 05.03.2008, 23:16  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Hallo pPanther,

da ich schon recht lange im Geschäft bin merke ich eigentlich gleich, wer nur zum Spas programmiert und wer das professionell betreibt. Keine Angst, ich hab nichts gegen Hobby-Coder...

An diesem Punkt - und hast du aber bereits selbst gemerkt - solltest du anfangen zu designen, denn sonst endet das in unendlichem Refactoring.

Was das Buch angeht, so kannst du dir mal "Professionelle Softwareentwicklung mit PHP 5" ansehen, da steht einiges drin. Später empfehle ich dir die Bücher zu lesen, die ich auf de Seite http://www.adventure-php-framework.org/Seite/Literatur aufgeführt habe. Als Anfänger ist das PDF "Entwurf und Implementierung eines Webportals..." interessant, da es einen Software-Entwurf komplett beschreibt.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Alt 06.03.2008, 17:16  
Benutzer
 
Registriert seit: 28.07.2007
Beiträge: 38
pPanther
Standard

Wenn du was gegen Hobby Programmierer hättest, währst du glaube ich nicht so aktiv hier im Forum.

Danke für deine Tipps. Jetzt habe ich wieder einiges zum Tüfteln und probieren
__________________
Ich bin gut schon gut, aber böse bin ich noch besser!
pPanther ist offline   Mit Zitat antworten
Alt 06.03.2008, 17:26  
Moderator und Wett-König
 
Benutzerbild von dr.e.
 
Registriert seit: 21.05.2008
Beiträge: 3.633
PHP-Kenntnisse:
Fortgeschritten
dr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblickdr.e. ist ein Lichtblick
dr.e. eine Nachricht über Skype™ schicken
Standard

Gerne. Solltest du Fragen haben, poste einfach nochmal hier, dann können wir einzelne Themen diskutieren.
__________________
Viele Grüße,
Dr.E.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1. Think about software design before you start to write code!
2. Discuss and review it together with experts!
3. Choose good tools (-> Adventure PHP Framework (APF))!
4. Write clean and reusable software only!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dr.e. ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Galerie Problem... coraplanet PHP Tipps 2008 4 06.06.2008 13:42
[gelöst]LEFT JOIN, DINSTINCT und trotzdem doppelte?!?! stefanjann Datenbanken 10 06.02.2008 11:49
JOIN / LEFT JOIN und Co prinzli Datenbanken 12 05.11.2007 22:15
problem!!! PHP Tipps 2006 6 08.02.2006 11:06
[Erledigt] wieder ein Problem bei phpmailer und smtp PHP Tipps 2006 24 07.02.2006 01:07
inner join aus db PHP Tipps 2006 8 22.01.2006 01:23
Select Problem Datenbanken 17 16.01.2006 21:54
[Erledigt] Abfrageproblem mit Inner Join Datenbanken 15 29.11.2005 18:17
[Erledigt] LEFT JOIN Query Bildung Datenbanken 6 04.11.2005 15:24
sql-Abfrage inner join - unerklärliches Problem havok Datenbanken 6 17.10.2005 14:32
[Erledigt] Problem mit Backslash Patrick Schwarz PHP Tipps 2005-2 5 26.07.2005 09:54
Join Problem Simon9990 PHP Tipps 2005-2 1 21.07.2005 22:15
Problem mit Where und Join Datenbanken 5 06.07.2005 18:05
[Erledigt] Problem mit JOIN Datenbanken 7 27.08.2004 16:00
Problem mit alter JavaScript-Funktion woods PHP Tipps 2004 1 13.08.2004 13:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sql joins böse

Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.