Antwort
 
Themen-Optionen Thema durchsuchen
Alt 24.03.2007, 09:20 Nach oben    #1
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 287
Standard Newspost und Kommentaranzahl auf einmal

Ich habe folgenden Query:

Code:
        $query = 'SELECT ' .
        'n.id, n.seo, n.headline, n.post, n.postdate, n.author,' .
        'COUNT(c.id) comments ' .
        'FROM newspost n ' .
        'LEFT JOIN newscomment c ON n.id = c.newsid ' .
        'WHERE n.postdate < ? AND n.textstatus = ? ' .
        'GROUP BY n.id ' .
        'ORDER BY n.postdate DESC';
Dadurch bekomme ich auf einen Schlag alle Newsposts und die dazugehörige Kommentaranzahl.

Jetzt werde ich aber allmählich von Kommentarspam zugeschissen und möchte Kommentare per E-Mail Benachrichtigung freischalten. Dazu gibt es in der Tabelle newspost das Feld textstatus was 0 oder 1 sein kann.

Mit dem obigen Query bekomme ich alle dazugehörigen Kommentare, allerdings werden dadurch auch Kommentare dazugerechnet die auf Status 0 sind. Ich möchte mit dem COUNT aber nur die Anzahl der aktiven Kommentare zusammengezählt haben. Das WHERE auszubauen hilft nichts.

Geht das nur mit zwei Queries?
ex³ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 10:33 Nach oben    #2
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Erstmal kann man das strukturiert viel besser angucken:
SQL Code:
  1. SELECT
  2.   n.id,
  3.   n.seo,
  4.   n.headline,
  5.   n.post,
  6.   n.postdate,
  7.   n.author,
  8.   COUNT(c.id) comments
  9. FROM
  10.   newspost n
  11. LEFT JOIN
  12.     newscomment c
  13.   ON
  14.     n.id = c.newsid
  15. WHERE
  16.     n.postdate < ?
  17.   AND
  18.     n.textstatus = ?
  19. GROUP BY
  20.   n.id
  21. ORDER BY
  22.   n.postdate
  23. DESC

Ich verstehe dich gerade nicht. Soll jetzt bei den Kommentaren auf Status 0 überprüft werden, oder bei den Posts?
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 12:23 Nach oben    #3
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 287
Standard

Mit dem COUNT sollen nun Kommentare berücksichtigt werden, die den c.textstatus = 1 haben. Der n.textstatus ist für die Newspost
ex³ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 18:38 Nach oben    #4
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

Kannste mal nen kleinen MySQL-Dump geben, hab Lust ein bisschen zu probieren.

Achja, welche MySQL-Version?
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 20:15 Nach oben    #5
Bastian Fenske
 
Registriert seit: 04.01.2006
Ort: Kassel
Beiträge: 853
Standard

Zitat:
Zitat von ex³ Beitrag anzeigen
Mit dem COUNT sollen nun Kommentare berücksichtigt werden, die den c.textstatus = 1 haben. Der n.textstatus ist für die Newspost
Dann würd ich es mit SUM(c.textstatus) probieren.

Basti
Basti ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 20:52 Nach oben    #6
Jonas
 
Benutzerbild von Artemis
 
Registriert seit: 03.06.2006
Beiträge: 244
Standard

LOL, auf die einfachsten Sachen kommt man nicht.

Dann hat sich das mit dem Dump wohl erledigt.
__________________
Applikations-Programmierung:
BlitzMax, BlitzPlus

Webentwicklung:
PHP, (X)HTML, CSS, JavaScript, MySQL


Artemis ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 24.03.2007, 21:39 Nach oben    #7
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 287
Standard

Zitat:
Dann würd ich es mit SUM(c.textstatus) probieren.
Ja das ist wirklich genial.

Allerdings hab ichs jetzt doch über 2 Queries gemacht.
ex³ ist offline  
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 31.03.2007, 10:48 Nach oben    #8
axo
Gast
 
Beiträge: n/a
Standard

Zitat:
Zitat von ex³ Beitrag anzeigen
Zitat:
Dann würd ich es mit SUM(c.textstatus) probieren.
Ja das ist wirklich genial.
nicht ganz, denn damit verändert sich die semantik des 'textstatus'. stati haben die dumme eigenschaft, sich mit der zeit zu erweitern, daher fliegt dir diese abfrage dann schön um die ohren, wenn es auf einmal einen textstatus=-1, textstatus=2 gibt.

um gar nicht erst in versuchung zu kommen, solche status-spalten für etwas anderes als ihren ursprünglichen zweck zu verwenden, bietet sich der datentyp ENUM an - macht die datenbank-daten auch besser lesbar und vermeidet magic numbers.

Zitat:
Allerdings hab ichs jetzt doch über 2 Queries gemacht.
das ist noch weniger genial, denn du verlierst viel performance. das sind, vorausgesetzt du enthältst uns keine informationen vor, auch keine 2, sondern n zusätzliche queries, wobei n die anzahl der newsposts ist. dadurch erhöht sich der aufwand des algorithmus von O(n^0) auf O(n^1), und das ist schlecht.

COUNT darf einen (einschränkenden) ausdruck behinhalten, daher lautet die richtige lösung:

Code:
SELECT COUNT(c.textstatus=1 [AND foo=bar [OR [...]]] ) ...
grüße
axo

Geändert von axo (31.03.2007 um 10:55 Uhr)
 
Diesen Beitrag zu to del.icio.us hinzufügen!Diesen Beitrag zu Technorati hinzufügen!Diesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

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 sind an
PingBacks sind an
RefBacks sind aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[PHP] FTP-Funktionen in PHP nutzen MrNiceGuy Tutorials 0 24.05.2006 14:18
Auf welcher Verbindungsgeraden (der Eckpunkte) eines Polygons liegt ein Punkt Ben Allgemeine Java-Programmierung 3 17.03.2006 09:22
Textfelder auf verschiedenen Tabs per Observer synchronisieren Sayang Desktop-Applikationen und Grafik 2 05.12.2005 19:14
[PHP] Aktuell gespielten Titel von XMMS auf einer Webseite in einer Grafik anzeigen Corvin Tutorials 0 28.11.2005 16:26
Login auf mehreren Domains Homepagespeicher PHP-Programmierung 17 21.08.2005 16:54


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:22 Uhr.


Powered by vBulletin® Version 3.7.4 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0

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