Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme.

[SQl] Anzahl der Beiträge mit timestamp des letzten abrufen.

Diskussion: [SQl] Anzahl der Beiträge mit timestamp des letzten abrufen. im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Frieden den Palästinensern. Ich verscuhe mit einem sql query die Anzahl aller Posts, die sich innerhalb von 4 Themen ...

Antwort
Alt 05.12.07, 19:42   #1 (permalink)
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard [SQl] Anzahl der Beiträge mit timestamp des letzten abrufen.

Anzeige

Frieden den Palästinensern.
Ich verscuhe mit einem sql query die Anzahl aller Posts, die sich innerhalb
von 4 Themen befinden, zu ermitteln + den timestamp des letzten posts.
Mit diesem query bekomme ich als last_post_time aber NULL zurück...

Code:
SELECT COUNT(*) AS `count_posts`, MAX(time) AS `last_post_time`
FROM `sj_posts` WHERE `sub` IN (1, 2, 3, 4)
Und wie bekomme ich auch gleich noch die id des letzten posts zurück?

Tabelle sj_forums
Code:
CREATE TABLE `sj_forums` (
  `id` int(10) unsigned NOT NULL default '0',
  `sub` int(11) NOT NULL default '0',
  `pos` int(11) NOT NULL default '0',
  `liststyle_subforums` tinyint(1) NOT NULL default '1',
  `list_topics` tinyint(1) NOT NULL default '1',
  `title` text collate latin1_general_ci NOT NULL,
  `desc` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Tabelle sj_posts
Code:
CREATE TABLE `sj_posts` (
  `id` int(11) NOT NULL,
  `sub` int(11) NOT NULL,
  `time` int(11) NOT NULL,
  `autor_id` int(11) NOT NULL,
  `title` text collate latin1_general_ci NOT NULL,
  `text` text collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
Also passende Suchbegriffe für Google fallen mir schonmal nicht ein.
Friedrich ist offline   Mit Zitat antworten
Alt 05.12.07, 20:27   #2 (permalink)
LX
Moderator
 
Registriert seit: 14.02.06
LX Leistung: Z3
LX eine Nachricht über ICQ schicken LX eine Nachricht über AIM schicken LX eine Nachricht über Yahoo! schicken
Likes: 21
Arrow

Kann spontan auch nicht den Fehler in deiner Abfrage finden, es sei denn, der Zeitstempel ist tatsächlich überall NULL (was in der Tabellendefinition ja ausgeschlossen ist). Muss es denn unbedingt in einem Query passieren? Du könntest deine Abfrage sonst so bauen, dass sie dir alle gesuchten Datensätze zurückgibt:

Code:
SELECT `id`, `time`
FROM `sj_posts`
WHERE `sub` IN (1, 2, 3, 4)
ORDER BY `time` DESC
Dann hast du im ersten Ergebnis den Zeitstempel des letzten Beitrags sowie dessen ID und in der Größe des Resultsets (mysql_num_rows() in PHP z.B.) auch die Anzahl der Beiträge, auf die deine WHERE-Klausel zutrifft.
__________________
"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

JS BB LX UP
LX ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 05.12.07, 22:54   #3 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

gibt es eigentlich auch Einträge mit 'sub'<=4 ?
Zitat:
Und wie bekomme ich auch gleich noch die id des letzten posts zurück?
Code:
SELECT id FROM sj_posts WHERE time=(SELECT MAX(time) from sj_posts WHERE sub IN (1,2,3,4));
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 06.12.07, 01:23   #4 (permalink)
 
Registriert seit: 04.10.05
bLaCk-DrAg0n Leistung: Facit NTK
bLaCk-DrAg0n eine Nachricht über ICQ schicken
Likes: 0
Standard

warum nimmst du eigentlich nen integer als time?
mysql hat doch date/time-funktionen...
bLaCk-DrAg0n ist offline   Mit Zitat antworten
Alt 06.12.07, 16:34   #5 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

@bLaCk-DrAg0n
Weil ich den Zeitpunkt als timestamp speichern will.

@CDW
Dann bekomme ich ja die Anzahl des posts und den timestamp des letzten nicht mit.

@LX
Damit würde ich 100fach mehr daten abrufen als ich brauche.

Naja. Die Funktion war gedacht für die Forenauflistungsschleife meiner
Boardsoftware, die ich in Arbeit habe.
Jeder Schleifendurchlauf (pro Unterforum ja eins) würde eine
sql-Abfrage nach meiner Idee schicken und dann noch eine
für die auszugebenden Details wie Anzahl der topics,
dann in Folge noch ne Abfrage für die Anzahl der posts je topic,
id des letzten posts und time.

Das wäre ja schonmal pure Unterhaltung, eine satte Stunde
zu Lachen für die zukünftigen exploit-Sucher.
Anscheinend muss ich leider wie in phpbb die details der Anzahl
der Beiträge in einem topic in einer topics_post_total-Spalte
speichern sowie die gesamte Anzahl der posts in einem
Forum in einer forum_posts_total-Spalte...

So ein Schlag ins Gesicht!
Und ich dachte, als ich das Tabellendesign von phpbb 2 sah: Was ein Trash!
Tja, hätte ich ja vll auch richtig gelegen, wenn meine Forensoftware
auf eine Verschachtelungsebene begrenzt wäre...

Danke für eure Hilfe...
Friedrich ist offline   Mit Zitat antworten
Alt 06.12.07, 19:29   #6 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
@CDW
Dann bekomme ich ja die Anzahl des posts und den timestamp des letzten nicht mit.
Dann nimmst du eben den timestamp mit in die SELECT Anweisung
und COUNT würde extra ermitteln. Obwohl es so auch gehen sollte:
Code:
SELECT id,time,COUNT(SELECT id FROM sj_posts WHERE sub IN (1,2,3,4)) FROM sj_posts WHERE time=(SELECT MAX(time) FROM sj_posts WHERE sub IN (1,2,3,4));
alles auf einmal zu ermitteln ergibt immer so hässliche Verschachtelungen.
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 07.12.07, 12:02   #7 (permalink)
 
Registriert seit: 04.10.05
bLaCk-DrAg0n Leistung: Facit NTK
bLaCk-DrAg0n eine Nachricht über ICQ schicken
Likes: 0
Standard

also ....
Code:
SELECT COUNT( `id` ) AS `post_num` , MAX( `time` ) AS `last_post`
FROM `sj_posts`
WHERE `sub`
IN ( 1, 2, 3, 4 ) ;
ist schonmal richtig so...

Code:
------------------------
| post_num | last_post |
| 12 	   | 123459    |
------------------------
also es sind insgesamt 12 post's gewesen wobei 4 davon die topics selbst sind und der rest sind halt antworten drauf...

weiss echt nich wo das prob liegt :X
bLaCk-DrAg0n ist offline   Mit Zitat antworten
Alt 08.12.07, 19:01   #8 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

@CDW

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `id` FROM `sj_posts` WHERE sub IN (1,2,3,4))
FROM `sj_posts`
WHERE `t' at line 1

Mein erster query hier im topic funktioniert jetzt.
Lag wahrscheinlich an den fehlenden ` um time...
Somit haut Black_Dragon's Lösung hin..
Friedrich ist offline   Mit Zitat antworten
Alt 08.12.07, 19:12   #9 (permalink)
CDW
Moderator
 
Benutzerbild von CDW
 
Registriert seit: 20.07.05
CDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: OpteronCDW Leistung: Opteron
Likes: 202
Standard

Zitat:
Original von Friedrich
@CDW

#1064 - You have an error in your SQL syntax; check the manual that corresponds to
Sorry, habs nicht 'real' überprüft - sollte nur eine Idee sein.Hätte dazuschreiben sollen, dass ich bis jetzt nur mit DB2 gearbeitet habe - das hätte nämlich die Anfrage so wie gepostet geschluckt .
__________________
Noch mal, für alle Pseudo-Geeks: 1+1=0. -> 10 wäre Überlauf!
Selig, wer nichts zu sagen hat und trotzdem schweigt.
CDW ist offline   Mit Zitat antworten
Alt 08.12.07, 23:24   #10 (permalink)
Themenstarter
 
Registriert seit: 11.11.07
Friedrich Leistung: Facit NTK
Friedrich eine Nachricht über ICQ schicken
Likes: 0
Standard

Gott, es wird immer härter mit SQL.
Fragt sich, wieso ich keine Doku dazu verstehe.

Code:
SELECT B.COUNT(*) AS `count_posts`, A.`id` AS `id`, A.`time` AS `time`, A.`autor_id` AS `autor_id`
FROM `sj_posts` A, `sj_posts` B
WHERE A.`sub`=1
ORDER BY A.`time` DESC
LIMIT 0, 1
Damit versuche ich nun, die Zeile mit dem größten timestamp
abzurufen mit samt `time`, `id` (id des Posts), `autor_id` (id des verfassers)
und gleich noch die Anzahl aller Beiträge im topic anzurufen.
Aber die Fehlermeldung hat schon Recht, dass das purer Bullshit ist.

Gibt es bei der MySql diese Möglichkeit überhaupt?
Friedrich ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Software Home » Code Kitchen » [SQl] Anzahl der Beiträge mit timestamp des letzten abrufen.
Themen-Optionen
Ansicht

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

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


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Information mit "Timestamp" kennzeichnen? speedo Cryptography & Encryption 1 19.04.09 13:02
Unix-Timestamp auf 1234567890 brain21 Linux/UNIX 10 14.02.09 00:39
MySQL parent path - children mit Anzahl deren children aus anderer Tabelle abrufen Friedrich Code Kitchen 2 27.07.08 22:20
[SQL] Anzahl aller Beiträge im Thema, timestamp & id des letzten posts in allen Themen Friedrich Code Kitchen 0 09.12.07 11:02
Oracle Timestamp to int? Metathron Code Kitchen 0 04.12.07 13:57


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61