|
Community
Szene & News
Locations
Impressum
|
Forum / Bits und Bytes
2 MySQL Tabellen zusammenführen?

McPommes - 51
Experte
(offline)
Dabei seit 09.2006
1422
Beiträge
|
|
Geschrieben am: 11.09.2006 um 06:59 Uhr
|
|
Also den Schlüsseln nach sieht es schon aus als könnte es funktionieren.
Fass das alles einfach mal in ein CREATE TABLE zusammen.
Dann musst du natürlich überall in deinem Forum alles entsprechend ändern, ich geh mal davon aus dass du den bestehenden Code größtenteils übernehmen willst?
Hab grad keine Zeit mehr, vielleicht heute abend wieder.
*** diese Fusszeile verschwendet 45 Bytes ***
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
|
Geschrieben am: 11.09.2006 um 11:01 Uhr
|
|
Zitat von Lucky-Luke: Das geht net....wo is der Sinn dahinter?
Ich will einfach die Forenbeiträge in einer Tabelle ahben und nciht verteilt
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
|
Geschrieben am: 11.09.2006 um 11:02 Uhr
|
|
Zitat von McPommes: Also den Schlüsseln nach sieht es schon aus als könnte es funktionieren.
Fass das alles einfach mal in ein CREATE TABLE zusammen.
Dann musst du natürlich überall in deinem Forum alles entsprechend ändern, ich geh mal davon aus dass du den bestehenden Code größtenteils übernehmen willst?
Hab grad keine Zeit mehr, vielleicht heute abend wieder.
Ich will ein eigenes Forum scripten und deshalb will ich auch den Tabellenaufbau etwas ändern...
Wird das Forum denn schneller, wenn es in einer Tabelle ist? Oder hat sich phpbb dabei etwas gedacht?
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
|
Geschrieben am: 11.09.2006 um 14:31 Uhr
|
|
Ich habe jetzt einfach die Spalten in der einen Tabelle erstellt und es dann upgedatet
|
|
McPommes - 51
Experte
(offline)
Dabei seit 09.2006
1422
Beiträge
|
|
Geschrieben am: 11.09.2006 um 19:01 Uhr
|
|
Zitat von fat32: Wird das Forum denn schneller, wenn es in einer Tabelle ist? Oder hat sich phpbb dabei etwas gedacht? 
Die haben sich sicher was dabei gedacht.
Der Text ist ja das einzige Element mit sehr variabler Länge. Ich kenne zwar die Internas von MySQL nicht, aber es könnte schon sinnvoll sein, wenn sowas in einer extra Tabelle liegt.
Gesucht wird ja nach den ganzen fixen Elementen, UserID, Datum und dem Zeug. Da könnte vielleicht schon die Sucherei um einiges schneller gehen, wenn die Datensätze alle eine fixe Länge haben. Wenn man dann den Eintrag aus der post-Tabelle gefunden hat, sucht man sich noch kurz die Texte dazu aus der anderen Tabelle raus.
Aber du kannst es ja mal probieren, wird schon kein Hochleistungsforum werden, bei dem es um jede Nanosekunde geht 
*** diese Fusszeile verschwendet 45 Bytes ***
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
|
Geschrieben am: 11.09.2006 um 20:09 Uhr
|
|
Zitat von McPommes: Zitat von fat32: Wird das Forum denn schneller, wenn es in einer Tabelle ist? Oder hat sich phpbb dabei etwas gedacht? 
Die haben sich sicher was dabei gedacht.
Der Text ist ja das einzige Element mit sehr variabler Länge. Ich kenne zwar die Internas von MySQL nicht, aber es könnte schon sinnvoll sein, wenn sowas in einer extra Tabelle liegt.
Gesucht wird ja nach den ganzen fixen Elementen, UserID, Datum und dem Zeug. Da könnte vielleicht schon die Sucherei um einiges schneller gehen, wenn die Datensätze alle eine fixe Länge haben. Wenn man dann den Eintrag aus der post-Tabelle gefunden hat, sucht man sich noch kurz die Texte dazu aus der anderen Tabelle raus.
Aber du kannst es ja mal probieren, wird schon kein Hochleistungsforum werden, bei dem es um jede Nanosekunde geht
Wer weiß :D
|
|
Caarcrinolas - 41
Profi
(offline)
Dabei seit 02.2006
909
Beiträge
|
Geschrieben am: 11.09.2006 um 23:43 Uhr
Zuletzt editiert am: 11.09.2006 um 23:45 Uhr
|
|
Zitat von fat32: Es sind die Tabellen phpbb_posts und phpbb_posts_text vom PHPBB-Forum... Ich will mein eigenes Forum basteln und finde es irgendwie umständlich, dass ich immer erst ne abfrage auf phpbb_posts machen muss und dann auf phpbb_posts_text für den text!!!
deshalb will ich es in einer tabelle haben.... wenn das geht
Dir ist aber schon bewusst weswegen man diese beiden Dateninhalte voneinander getrennt hat oder?
In phpbb_posts befinden sich sämtliche Daten eines Postings betreffend, d.h. im Grunde alle Daten die auf Konfigurationen einzelner Topics anspielen und ist als Zwischentabelle zwischen der Forums. Topics und der Posts Tabelle anzusehen.
Der Sinn dieser Kapselung ist ganz einfach....
Wenn der Benutzer sich in der Forenansicht befindet, sind nur die Daten relevant wie Forum, Topictitel, Zeitpunkt, Antworten, Leser.
Aber es sind nicht die Daten von Nöten die unmittelbar den Thread betreffen, wie z.B. ist HTML/BBCODE im Posting seitens des Benutzers gwünscht oder nicht. Auch Spielen die ganzen Posting Texte an sich keine Rolle.
Man versucht so gut es geht die Datenbanklast zu reduzieren, indem man unnötige Informationen erst dann holt wenn sie tatsächlich gebraucht werden.
Und nichts ist schlimmer für eine Datenbank, wie über etliche Texte laufen zu müssen.
Soll heissen du kannst die Performance möglicherweise ganz schön in den Keller reissen damit.
Ich lege meine Hand für PHPBB keineswegs in Feuer, da auch PHPBB an ein paar Punkten nicht ganz optimal ist, was auch der historischen Entwicklung und etlichen Workarounds zu grunde liegt. Doch hat zumidnest das Datenbankkonzept seinen Sinn.
BTW: Wenn du die Tabellen zusammenführst, solltest du auch beachten, dass du verschachtelte Tabellenabfragen abändern musst.
Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
Geschrieben am: 11.09.2006 um 23:53 Uhr
Zuletzt editiert am: 11.09.2006 um 23:58 Uhr
|
|
Dan hab ich ads wohl umsonst gemacht...
ich scripte ja ein eigenes Forum und könnte es ja wieder rückgängig machen (Backups sind schon was feines)...
Ist der Geschwindigketsverlust groß, wenn ich es alles in einer Tabelle habe?
Zitat:
BTW: Wenn du die Tabellen zusammenführst, solltest du auch beachten, dass du verschachtelte Tabellenabfragen abändern musst.
das war der grund, warum ich es in einer tabelle haben wollte! weil man ja so zu jedem beitrag nochmal eine abfrage machen muss und es meiner meinung nach schneller ist, wen man pro beitrag nur 1 abfrage braucht
|
|
Caarcrinolas - 41
Profi
(offline)
Dabei seit 02.2006
909
Beiträge
|
|
Geschrieben am: 12.09.2006 um 00:29 Uhr
|
|
Zitat von fat32: Dan hab ich ads wohl umsonst gemacht...
ich scripte ja ein eigenes Forum und könnte es ja wieder rückgängig machen (Backups sind schon was feines)...
Ist der Geschwindigketsverlust groß, wenn ich es alles in einer Tabelle habe?
Je nach Größe der Datenbank, Gleichzeitiger Benutzerzugriffe kann sich das ins negative ziehen. Aber da ich seit langer Zeit nicht mehr im PHPBB Code mein Unwesen treibe, kann ich dir schlecht sagen wo u.A. die posts_text Tabelle nicht gebraucht wird.
Da könnte dir www.phpbb.de weiterhelfen. (Moderatoren)
Zitat von fat32:
das war der grund, warum ich es in einer tabelle haben wollte! weil man ja so zu jedem beitrag nochmal eine abfrage machen muss und es meiner meinung nach schneller ist, wen man pro beitrag nur 1 abfrage braucht
Ein kleines Beispiel:
Select
L.Liefnr, L.Liefname, A.Liefnr, A.Artnr, A.Artvar, A.Artname, A.Preis,V.Artnr, V.Variantnr, V.Variantdesc
FROM
Lieferanten L
INNER JOIN
Artikel A
ON L.Liefnr = A.Liefnr
INNER JOIN
Artikelvarianten V
ON A.Artnr = V.Artnr
WHERE
L.Liefnr=213394
Dieses kleine Beispiel vereint die Tabellen Lieferanten, Artikel und seine Artikelvarianten.
Und ich kann mit einem Blick feststellen was der lieferant 213394 für Artikel und Artikelvarianten hat.
Natürlich gibts zu inner join was von einem Gleichnis ausgeht Ergebnismenge von Tabelle A muss auch in Tabelle B existieren um angezeigt zu werden auch Richtungsweisende wie Left Join und Right Join. Left join würde bedeuten das Table B von Table A abhängig ist. Dadurch kann man NULL Ergebnismengen erhalten mit denen man z.B. ein explizites deny Rechtesystem aufziehen könnte.
Durch diese Relationen in diesem Beispiel kann ich z.B. die Artikel Tabelle gegen die Lieferanten Tabele gegenüberstellen und die Aussage treffen "Zeige mir Artikel x an der von y Lieferanten bestellt werden kann"
Relationen sind bei großen Webentwicklungen sehr wichtig.
Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
Geschrieben am: 12.09.2006 um 00:33 Uhr
Zuletzt editiert am: 12.09.2006 um 00:34 Uhr
|
|
Zitat von Caarcrinolas: Zitat von fat32: Dan hab ich ads wohl umsonst gemacht...
ich scripte ja ein eigenes Forum und könnte es ja wieder rückgängig machen (Backups sind schon was feines)...
Ist der Geschwindigketsverlust groß, wenn ich es alles in einer Tabelle habe?
Je nach Größe der Datenbank, Gleichzeitiger Benutzerzugriffe kann sich das ins negative ziehen. Aber da ich seit langer Zeit nicht mehr im PHPBB Code mein Unwesen treibe, kann ich dir schlecht sagen wo u.A. die posts_text Tabelle nicht gebraucht wird.
Da könnte dir www.phpbb.de weiterhelfen. (Moderatoren)
Zitat von fat32:
das war der grund, warum ich es in einer tabelle haben wollte! weil man ja so zu jedem beitrag nochmal eine abfrage machen muss und es meiner meinung nach schneller ist, wen man pro beitrag nur 1 abfrage braucht
Ein kleines Beispiel:
Select
L.Liefnr, L.Liefname, A.Liefnr, A.Artnr, A.Artvar, A.Artname, A.Preis,V.Artnr, V.Variantnr, V.Variantdesc
FROM
Lieferanten L
INNER JOIN
Artikel A
ON L.Liefnr = A.Liefnr
INNER JOIN
Artikelvarianten V
ON A.Artnr = V.Artnr
WHERE
L.Liefnr=213394
Dieses kleine Beispiel vereint die Tabellen Lieferanten, Artikel und seine Artikelvarianten.
Und ich kann mit einem Blick feststellen was der lieferant 213394 für Artikel und Artikelvarianten hat.
Natürlich gibts zu inner join was von einem Gleichnis ausgeht Ergebnismenge von Tabelle A muss auch in Tabelle B existieren um angezeigt zu werden auch Richtungsweisende wie Left Join und Right Join. Left join würde bedeuten das Table B von Table A abhängig ist. Dadurch kann man NULL Ergebnismengen erhalten mit denen man z.B. ein explizites deny Rechtesystem aufziehen könnte.
Durch diese Relationen in diesem Beispiel kann ich z.B. die Artikel Tabelle gegen die Lieferanten Tabele gegenüberstellen und die Aussage treffen "Zeige mir Artikel x an der von y Lieferanten bestellt werden kann"
Relationen sind bei großen Webentwicklungen sehr wichtig.
Diese Art von Abfragen kannte ich gar nicht... Steht auch in keinem Buch/Tutorial, das ich bis jetzt gelesen habe! Danke...
Dann werde ich die Tabellen wieder trennen und mehr mit solchen Sachen arbeiten...
Aber was haben die Buchstaben vor den spaltennamen zu sagen?
|
|
Caarcrinolas - 41
Profi
(offline)
Dabei seit 02.2006
909
Beiträge
|
|
Geschrieben am: 12.09.2006 um 00:42 Uhr
|
|
Zitat von fat32: Aber was haben die Buchstaben vor den spaltennamen zu sagen?
Das ist banal Tabellenaliase
Lieferanten L
man könnte auch Lieferanten.Feldname schreiben doch macht das komplizierte Abragen nicht unbedingt übersichtlich
Aristoteles: "Es gibt kein großes Genie ohne einen Schuß Verrücktheit."
|
|
fat32
Experte
(offline)
Dabei seit 09.2006
1465
Beiträge
|
|
Geschrieben am: 12.09.2006 um 00:50 Uhr
|
|
Zitat von Caarcrinolas: Zitat von fat32: Aber was haben die Buchstaben vor den spaltennamen zu sagen?
Das ist banal Tabellenaliase
Lieferanten L
man könnte auch Lieferanten.Feldname schreiben doch macht das komplizierte Abragen nicht unbedingt übersichtlich
Hast du das Beispiel von oben von hier? http://www.html-world.de/program/mysql_5.php
Da steht, dass es oft sinnvoller ist, mehrere Selects nacheinander auszuführen... trifft das auf mein problem auch zu?
|
|
Forum / Bits und Bytes
|