2010-12-31 6 views
4

Ich habe meine Haare verlieren versucht herauszufinden, was ich falsch mache, lassen Sie mich etwas über meine MySQL-Struktur erklären (damit Sie ein besseres Verständnis bekommen), bevor ich direkt auf die Frage gehe.MySQL COUNT() Beiträge insgesamt innerhalb eines bestimmten Kriterien?

Ich habe ein einfaches PHP-Forum und ich habe eine Spalte in beiden Tabellen (für Beiträge und Themen) mit dem Namen 'gelöscht', wenn es gleich 0 bedeutet, dass angezeigt (nicht gelöscht/existiert) oder wenn es gleich 1 ist es versteckt (gilt als gelöscht/existiert nicht) - bool/mager.

Jetzt sind die 'spezifischen Kriterien', über die ich bin ... Ich möchte eine Gesamtanzahl von Posts innerhalb eines bestimmten Forums mit seiner ID (forum_id) erhalten, so dass es nur Beiträge zählt, die nicht gelöscht werden (deleted = 0) und ihre übergeordneten Themen werden ebenfalls nicht gelöscht (deleted = 0).

Die Spalten-/Tabellennamen sind selbsterklärend (siehe unten, falls nötig).

Ich habe das versucht, folgende (unter Verwendung eines 'einfachen' JOIN):

SELECT COUNT(t1.post_id) 
    FROM forum_posts AS t1, forum_topics AS t2 
WHERE t1.forum_id = '{$forum_id}' 
    AND t1.deleted = 0 
    AND t1.topic_id = t2.topic_id 
    AND t2.deleted = 0 
LIMIT 1 

Ich habe auch schon versucht, diese (mit einem Subquery):

SELECT COUNT(t1.post_id) 
    FROM forum_posts AS t1 
WHERE t1.forum_id = '{$forum_id}' 
    AND t1.deleted = 0 
    AND (SELECT deleted 
      FROM forum_topics 
     WHERE topic_id = t1.topic_id) = 0 
LIMIT 1 

Aber beide entsprechen nicht den spezifischen Kriterien.

Schätzen Sie alle Hilfe! :)

Antwort

1
SELECT 
    COUNT(*) AS total 
FROM 
    forum_topics 
JOIN 
    forum_posts ON topic_id 
WHERE 
    forum_topics.deleted = 0 
    AND forum_posts.deleted = 0 
    AND forum_posts.forum_id = '{$forum_id}' 

Dadurch werden die beiden Tabellen mit dem topic_id, und nur zurückgehen verbinden, die die Kriterien der beiden Tabellen erfüllen haben deleted = 0 und das Forum ID gewünscht.

0

Ich bin nicht sicher, ob ich verstehe Ihre Frage, aber Sie können mit der folgenden Abfrage und Feinabstimmung es beginnen zu tun, was Sie wollen:

SELECT COUNT(*) 
FROM topic_posts AS TP 
WHERE forum_id='{$forum_id}' AND 
    deleted=0 AND    -- Count topic posts that are not deleted and... 
    NOT EXISTS (    -- make sure they are not for a deleted forum 
    SELECT * FROM forum_posts 
    WHERE forum_id=TP.forum_id and 
    deleted<>0) 

Ich habe Kommentare zu der Abfrage um Ihnen zu helfen .

Verwandte Themen