php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 28.08.2010, 10:08  
Neuer Benutzer
 
Registriert seit: 28.08.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Just Matt befindet sich auf einem aufstrebenden Ast
Standard Abfrage über 4 Tabellen um phpbb Forum nach Drupal umzuziehen

Hallo zusammen,

ich bin gerade dabei mein phpbb Forum in das Drupal-CMS zu integrieren.

Jedes Thema wird in der Tabelle phpbb_topics gestartet und erhält dort (u.a.) einen Eintrag des beginnenden Posts in der Spalte phpbb_topics.topic_first_post_id.

Die Topics konnte ich relativ problemlos abfragen und habe sie in die Drupal-Tabelle importieren können. Bei den Antwort-Posts auf die Topics tue ich mich sauschwer. Ich krieg die Abfrage einfach nicht hin. Sinngemäß sollen nur diejenigen Posts angezeigt werden, die nicht als topic_first_post gelistet sind, weil ich die ja bereits importiert habe. Bei Drupal wird unterschieden zwischen (Node = Topic und comment = post). In der (Zieltabelle) comments-tabelle brauche ich erschwerenderweise auch noch den Usernamen, usw. usw.

Bei der folgenden Abfrage zeigt er mir 260.179 Datensätze der 260.195 Datensätze von phpbb_posts-Tabelle an:

Code:
SELECT
'0' AS pid,
phpbb_posts.poster_id AS uid,
phpbb_posts_text.post_subject AS subject,
phpbb_posts_text.post_text AS comment,
phpbb_posts.post_time AS timestamp,
'0' AS status,
'1' AS format,
phpbb_users.username AS name
FROM phpbb_posts_text INNER JOIN phpbb_posts
ON (phpbb_posts_text.post_id=phpbb_posts.post_id)
INNER JOIN phpbb_users
ON (phpbb_posts.poster_id = phpbb_users.user_id)
WHERE exists ( SELECT phpbb_posts.post_time, phpbb_topics.topic_time FROM phpbb_posts, phpbb_topics WHERE phpbb_posts.post_time!=phpbb_topics.topic_time)
Ich brauch's aber ja genau umgekehrt. Er soll mir ja nur die Teilmenge an Posts anzeigen, die nicht als Themenstarter in der Tabelle phpbb_topics gelistet sind.

Ich erspare Euch mal die ganzen Versuchsabfragen

Entweder das Ergebnis war Null, oder ich erhielt dann um die 4.400 Datensätze aus der phpbb_topics-Tabelle, die tatsächlich 4.415 Datensätze enthält.

Ich hoffe ich konnte mein Problem einigermaßen veranschaulichen

Viele Grüße

Matthias
Just Matt ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

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

Alt 28.08.2010, 12:17  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Vielleicht sind Differenz-Posts von einem User, den es nicht mehr gibt?
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 28.08.2010, 12:30  
Neuer Benutzer
 
Registriert seit: 28.08.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Just Matt befindet sich auf einem aufstrebenden Ast
Standard

Ich dachte das die in der Bedingung enthaltene Unterabfrage

Code:
WHERE EXISTS (
SELECT phpbb_posts.post_time, phpbb_topics.topic_time
FROM phpbb_posts, phpbb_topics
WHERE phpbb_posts.post_time != phpbb_topics.topic_time
)
zumindest die Teilmenge anzeigt, die nicht nicht in der Tabelle phpbb_topics enthalten ist. Ich erhalte aber wie gesagt, trotzdem 260.179 angezeigt. Anhand der Daten erscheinen auch die Topic-Starter-Posts.

Über die 16 fehlenden Datensätze (260.179 zu 260.195) hatte ich mir noch keine Gedanken gemacht, aber das liegt vielleicht wirklich an einem nicht mehr existierenden User.

Mir geht's im ersten Schritt aber erstmal um die o.g. Teilmenge. Liegt es vielleicht am "WHERE EXISTS", oder ist die Bedingung von vornherein zum scheitern verurteilt. "WHERE NOT EXISTS" liefert nämlich NULL zurück.
Just Matt ist offline   Mit Zitat antworten
Alt 28.08.2010, 14:17  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Code:
SELECT phpbb_posts.post_time, phpbb_topics.topic_time
FROM phpbb_posts, phpbb_topics
WHERE phpbb_posts.post_time != phpbb_topics.topic_time
Schau dir einfach mal an, was die innere Abfrage an Ergebnissen ausspuckt, das ist entscheident für das Verhalten von EXISTS in der äußeren Abfrage...
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 28.08.2010, 22:11  
Neuer Benutzer
 
Registriert seit: 28.08.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Just Matt befindet sich auf einem aufstrebenden Ast
Standard

Hab ich jetzt gemacht und da kommen als Ergebnis *ähem* 1.183.362.420 Datensätze raus und zwar jeweils 4.547 x die gleiche post_id mit je einer anderen topic_id. Ich vermute, dass die Abfrage bewirkt, dass z.B. post_id 1043366488 unterschiedlich ist als topic_id 1043368026, post_id 1042266488 unterschiedlich ist als topic_id 1043366315, usw.

Wenn ich das gleiche mit dem Feld post_id und topic_first_post_id mache, komme ich zum ähnlichen Ergebnis.

Das ist genau mein Problem. Ich kriege die Abfrage nicht formuliert. Entweder ich bekomme die Ergebnisse multipliziert mit den gefundenen Differenzen oder ich bekomme als Ergebnis gar nichts angezeigt.
Just Matt ist offline   Mit Zitat antworten
Alt 29.08.2010, 18:44  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 3.891
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Menschlstegelitz ist ein sehr geschätzer Mensch
Standard

Code:
SELECT
'0' AS pid,
phpbb_posts.poster_id AS uid,
phpbb_posts_text.post_subject AS subject,
phpbb_posts_text.post_text AS comment,
phpbb_posts.post_time AS timestamp,
'0' AS status,
'1' AS format,
phpbb_users.username AS name
FROM phpbb_posts_text INNER JOIN phpbb_posts
ON (phpbb_posts_text.post_id=phpbb_posts.post_id)
INNER JOIN phpbb_users
ON (phpbb_posts.poster_id = phpbb_users.user_id)
WHERE
phpbb_posts.post_id NOT IN (SELECT post_id FROM phpbb_topics)

sowas in der Art... kenne die Interna von phpBB nicht
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 29.08.2010, 21:07  
Neuer Benutzer
 
Registriert seit: 28.08.2010
Beiträge: 4
PHP-Kenntnisse:
Anfänger
Just Matt befindet sich auf einem aufstrebenden Ast
Standard

Jo, genau, hab's mit

Code:
WHERE phpbb_posts.post_id NOT IN (SELECT topic_first_post_id FROM phpbb_topics 
    WHERE topic_first_post_id=phpbb_posts.post_id)
heute nachmittag selbst gelöst. Was'n Kraftakt

Bei > 260.000 posts und ca. 4.500 topics hat die ganze Geschichte ungefähr 20 Minuten auf meinem Laptop gerechnet.
Just Matt 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] Abfrage über 3 Tabellen mit noop Datenbanken 4 01.08.2010 15:34
[Erledigt] Abfrage über 2 Tabellen dauert zu lange Registrierer Datenbanken 3 05.06.2010 20:44
[Erledigt] Select Abfrage über 2 Tabellen bringt keine Ausgabe clamber Datenbanken 4 03.03.2010 15:25
[Erledigt] SQL Abfrage über zwei Tabellen mit ORDER Geronimo2000 Datenbanken 16 02.02.2010 16:45
Abfrage über 2 Tabellen rassamee PHP Tipps 2009 10 02.08.2009 18:46
Scriptsuche [Erledigt] SQL- Abfrage über 2 tabellen ejim Scriptbörse 1 17.07.2009 21:10
[Erledigt] SQL Abfrage über 2 Tabellen, wenn eine davon leer ist Registrierer Datenbanken 13 18.05.2009 20:48
PhpBB Forum an bestehende Userdatenbank anknüpfen ChrisV PHP Tipps 2006 8 02.10.2006 13:17
Abfrage über 3 Tabellen madSoul Datenbanken 5 26.06.2006 12:25
Mysql Abfrage über 2 Tabellen mit Verknüpfung zuner 3. Datenbanken 2 26.10.2004 16:36
Abfrage über 2 tabellen mit NOT IN Datenbanken 3 25.10.2004 16:49
problem mit einer abfrage über mehrere tabellen! PHP Tipps 2004 1 12.10.2004 18:54
Abfrage über 3 Tabellen Datenbanken 3 20.09.2004 08:08
Abfrage über 2 Tabellen / Join agrajag Datenbanken 2 14.09.2004 23:05
Abfrage über 3 Tabellen PHP Tipps 2004 3 31.07.2004 22:34

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
drupal umziehen, drupal datenbank abfragen, Über 90% aller gewaltverbrechen passieren innerhalb von 24 stunden nach dem konsum von brot., tabelle im forum, http://www.php.de/datenbanken/71236-abfrage-ueber-4-tabellen-um-phpbb-forum-nach-drupal-umzuziehen.html, drupal phpbb, phpbb3 foren themen abfragen, tabellen für foren mit phpbb., php teilmengen, drupal tabelle forum, drupal phpbbforum integration nicht eingeloggt, phpbb datenbank abfragen, phpbb mit tabellen, phpbb mit drupal keine registrierung in phpbb, phpbbforum drupal comments, tabbelle phbb, drupal integration phpbb3, php abfrage über vier tabellen#, drupal sql abfrage, sql abfrage über 4 tabellen

Alle Zeitangaben in WEZ +1. Es ist jetzt 22:30 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