SQL-Abfrage: Problem mit Datum

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
ceho
Mitglied
Beiträge: 41
Registriert: 23.06.2005 22:44

SQL-Abfrage: Problem mit Datum

Beitrag von ceho »

Hallo zusammen, vorab, ich habe leider praktisch keine Erfahrungen mit SQL-Abfragen, deshalb bitte ich Euch nach langem Epxerimentieren und Suchen im Forum um Hilfe. Ich möchte eine Abfrage starten, die mir folgende Ergebnisse liefert:

username, user_email

von usern, die mehr als 1x gepostet haben und deren letzter post vor dem 01.01.2008 geschrieben wurde.

Folgendes habe ich schon zusammenbekommen, aber das Ergebnis stimmt nicht (es werden irgendwie alle user angegeben...).

Code: Alles auswählen

SELECT `phpbb_users`.`username` , `phpbb_users`.`user_email` , `phpbb_users`.`user_posts` 
FROM phpbb_users, phpbb_posts
WHERE (
(
`phpbb_users`.`user_posts` >1
)
AND (
`phpbb_posts`.`post_time` >2008 -01 -01
)
)
LIMIT 60 , 60 
Kann mir jemand verraten wo mein Fehler liegt und/oder eine entsprechende funktionierende Abfrage nennen?

Herzlichen Dank im voraus!!
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

Code: Alles auswählen

SELECT username, user_email, user_posts
FROM phpbb_users, phpbb_posts
WHERE
user_posts > 1
AND post_time > 1199142001
AND poster_id = user_id
GROUP BY username
1199142001 = 1.1.2008 0:00:01 (timestamp)

Du hattest nicht angegeben, daß die poster_id aus der phpbb_posts mit der user_id aus der phpbb_users übereinstimmen muß, die Verknüpfung fehlte also komplett, daher kriegst du alle User. (aber du wolltest ja nur welche, die einen Post haben)

Und: das "GROUP BY" ist nötig, damit du jeden User nur einmal bekommst.

B.


EDIT: wer lesen kann ...
"deren letzter post vor dem 01.01.2008 geschrieben wurde" - wird damit natürlich nicht abgefragt (das hätte dein Query aber auch nicht gemacht bei "post_time größer 1.1.08 ), aber damit kannst du jetzt wenigstens weiter experimentieren :)
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
ceho
Mitglied
Beiträge: 41
Registriert: 23.06.2005 22:44

Beitrag von ceho »

Schon einmal ganz herzlichen Dank! Ich habe diese Abfrage so gestartet und alle user herausbekommen, die nach dem 01.01.2008 gepostet haben. Dann habe ich das > vor dem Datum in ein < umgedreht und es kam ein Ergebnis heraus, das grösstenteils zu stimmen scheint.

Allerdings sind nachweislich auch user in diesem Ergebnis dabei, die auch nach dem 01.01.2008 gepostet haben, z.B. ein Admin und ein Mod (und weitere). Allerdings kann ich hier absolut keinen Zusammenhang erkennen.

Hast Du evtl. eine Idee woher dies noch kommen könnte?

Vielen Dank!!!!

P.S. Könnte man das Datum des letzten Posts noch augeben lassen? Dann könnte ich das Ergebnis ja danach noch sortieren...
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

ceho hat geschrieben:Hast Du evtl. eine Idee woher dies noch kommen könnte?
Klar: du fragst ab (bzw. willst abfragen), ob jemand VOR dem 1.1. gepostet hat, ob NACHher noch gepostet wurde, ist in dem Query überhaupt nicht vorhanden.
ceho hat geschrieben:P.S. Könnte man das Datum des letzten Posts noch augeben lassen? Dann könnte ich das Ergebnis ja danach noch sortieren...
nicht, wenn du die nicht auch in das SELECT mit einbaust, du kannst also nicht sagen "hol mir alle VOR dem 1.1. und gib mir das letzte NACH dem 1.1. an", da die erste Bedingung die zweite ausschließt

ich würde mir wahrscheinlich alle User holen, die überhaupt mehr als einen Post haben, die in einer Schleife durchlaufen und dann mit einem weiteren Query (pro User) testen, wann der letzte Post war (aber auch nur, weil ich zu faul für ultrakomplexe Queries bin, die dann 20min. brauchen, um ausgeführt zu werden)
aber wie es am besten funktioniert, findest du schon raus ;)

B.
Zuletzt geändert von buegelfalte am 12.02.2008 16:55, insgesamt 1-mal geändert.
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
ceho
Mitglied
Beiträge: 41
Registriert: 23.06.2005 22:44

Beitrag von ceho »

Ah OK, verstehe. Wärest Du denn so nett mir noch zu verraten, wie ich Punkt 1 abdecke, ich also nur die user herausbekomme, die VOR dem 01.01. mindestens einmal gepostet haben, jedoch NACH dem 01.01. nicht mehr? Genau dann hätte ich ja mein Ergebnis...

Tausend Dank für die schnelle Hilfe, das bringt mich echt weiter!!
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

s.o.: Schleife, das ist am einfachsten, wenn du dich mit SQL nicht auskennst

es gibt auch verschachtelte Queries (2 oder mehr in einer Abfrage), wo du dir erst alle User holst, die min. 2 Posts haben, und aus denen dann die, deren letzter Post vor dem 1.1. lag (mit der MAX(post_time)-Funktion), aber wie gesagt: selbst rausfinden bringts ;)
Zuletzt geändert von buegelfalte am 12.02.2008 18:49, insgesamt 1-mal geändert.
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
ceho
Mitglied
Beiträge: 41
Registriert: 23.06.2005 22:44

Beitrag von ceho »

aber wie gesagt: selbst rausfinden bringts
Sehe ich zwar genauso, in meinem Fall komme ich mir vor wie ein Kindergartenkind, dem ein Uni-Professor sagt schreib mal 'ne Doktorarbeit ;-). Ich beschäftige mich heute gerade das zweite Mal in meinem Leben mit SQL-Abfragen (bin ja nur ein Hobby-Bastler).

Na hoffentlich komme ich mit Deinen Hinweisen irgendwie weiter :oops:.

Danke auf jeden Fall.
Benutzeravatar
buegelfalte
Mitglied
Beiträge: 759
Registriert: 16.02.2005 14:32
Wohnort: Köln
Kontaktdaten:

Beitrag von buegelfalte »

ceho hat geschrieben:Sehe ich zwar genauso, in meinem Fall komme ich mir vor wie ein Kindergartenkind, dem ein Uni-Professor sagt schreib mal 'ne Doktorarbeit ;-).
Aber ein Kindergartenkind, was immer nur sagt: "Mach du mal für mich, ich kanns nicht." lernt auch nix ;)

Code: Alles auswählen

SELECT username, user_email, user_posts, MAX( post_time ) AS lastpost
FROM phpbb_users, phpbb_posts
WHERE user_posts >1
AND poster_id = user_id
GROUP BY username
HAVING lastpost <1199142001
B.
http://www.beehave.de - home of humbug - und zocken !
[kein Support per PN]
ceho
Mitglied
Beiträge: 41
Registriert: 23.06.2005 22:44

Beitrag von ceho »

Aber ein Kindergartenkind, was immer nur sagt: "Mach du mal für mich, ich kanns nicht." lernt auch nix
Klarer Fall!!

War ja auch nicht böse gemeint, meine Anmerkung. Step by step, und dann bekommt es auch das "Kindergartenkind" hin :grin:

Und Deine Abfrage fluppt nur so, ganz herzlichen Dank, echt!!!! Und gelernt habe ich nun auch einiges, das nächste Mal begreife ich dann schon etwas schneller ;-).

Nochmals Danke für Deine Hilfe!!
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“