Zurück   BuHa-Security Board > Programmierung und Software-Entwicklung > Datenbanken
Registrieren Hilfe Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren


Antwort
 
Themen-Optionen Ansicht
Alt 10.11.2009, 12:57   #1
ByteBreaker
Registered User

 
Registriert seit: Feb 2001
Karma: 17 ByteBreaker liegt in der Wertung
Fehler beim Count...aber wo?

Moin

Ich habe 3 Tabellen:
1. Tabelle: kategorien
2. Tabelle: aktion
2. Tabelle: teilnahmen

Jetzt will ich alle Einträge aus "kategorien" auslesen, passen dazu die Anzahl der "aktion", welche zu der Kategorie gehören...und passend dazu die Anzahl der "teilnahmen" (aktuelle User-ID).

Wenn der User nicht Teilgenommen hat, stimmt alles, aber sobald der User > 3 x teilgenommen hat, erhöht sich jedesmal die Anzahl der Teilnahmen (was ja auch richtig ist) und die Anzahl der Aktionen in dieser Kat (welches falsch ist)

So sieht das ganze aus:

$this->date_db ist das aktuelle datum in US (mysql)-Format
$uid ist die aktuelle User-ID


PHP-Code:
$sql1 $this->db->sql_query("SELECT
            kat.*,
            bo.*,
            COUNT(bo.kat_id) AS sum_aktion,
            COUNT(teil.k_code) AS sum_teilnahmen
        FROM " 
$this->db->prefix "_pwc_aktion_kat AS kat
        LEFT JOIN " 
$this->db->prefix "_pwc_aktion AS bo
            ON (kat.kat_id = bo.kat_id)
            AND (bo.k_start < '" 
$this->date_db "')
            AND (bo.k_ende > '" 
$this->date_db "')
            AND (kat.kat_status = bo.k_status)
            AND (kat.kat_status = 1)
        LEFT JOIN " 
$this->db->prefix "_pwc_aktion_teilnahmen AS teil
            ON (teil.k_code = bo.k_code)
            AND (teil.k_user_id = '" 
intval($uid) . "')
        GROUP BY kat.kat_name
        ORDER BY kat.kat_name ASC"
); 
Wenn ich jetzt die Query der Teilnahmen ausbaue, stimmt alles wieder.....vielleicht findet ja von euch einer den Fehler
__________________
Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.
ByteBreaker ist offline   Mit Zitat antworten
Alt 10.11.2009, 16:52   #2
Shakademus
Member

 
Registriert seit: May 2004
Karma: 831 Shakademus ist eine Bereicherung fuer die Gemeinschaft.
Re: Fehler beim Count...aber wo?

Hab nur mal kurz drübergeschaut, aber ich bin mir ziemlich sicher, dass die beiden COUNTs immer das Gleiche zurückgeben. Du hast Durch das JOIN schließlich genau so viele teil- wie bo-Einträge.
Shakademus ist offline   Mit Zitat antworten
Alt 10.11.2009, 18:29   #3
ByteBreaker
Registered User

 
Registriert seit: Feb 2001
Karma: 17 ByteBreaker liegt in der Wertung
Re: Fehler beim Count...aber wo?

Ja, eigentlich stimmt deine Aussage...aber wenn "sum_teilnahmen" = 0 ist...dann müsste doch auch "sum_aktion" = 0 sein, oder nicht?

Aber: Wenn ich die Teile für "sum_teilnahmen" komplett ausbaue, dann läuft es...ich will aber nicht eine 2. Query dafür brauchen
__________________
Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.
ByteBreaker ist offline   Mit Zitat antworten
Alt 10.11.2009, 22:31   #4
ByteBreaker
Registered User

 
Registriert seit: Feb 2001
Karma: 17 ByteBreaker liegt in der Wertung
Re: Fehler beim Count...aber wo?

Ok, hab die Lösung gefunden, ein simples DISTINCT war es


PHP-Code:
        $sql1 $this->db->sql_query("SELECT
            kat.*,
            bo.*,
            COUNT(DISTINCT bo.k_name) AS sum_aktion,
            COUNT(teil.k_code) AS sum_teilnehmen
        FROM " 
$this->db->prefix "_pwc_aktion_kat AS kat
        LEFT JOIN " 
$this->db->prefix "_pwc_aktion AS bo
            ON (kat.kat_id = bo.kat_id)
            AND (bo.k_start < '" 
$this->date_db "')
            AND (bo.k_ende > '" 
$this->date_db "')
            AND (kat.kat_status = bo.k_status)
            AND (kat.kat_status = 1)
        LEFT JOIN " 
$this->db->prefix "_pwc_aktion_teilnahmen AS teil
            ON (bo.k_code = teil.k_code)
            AND (teil.k_user_id = '" 
intval($uid) . "')
        GROUP BY kat.kat_name
        ORDER BY kat.kat_name ASC"
); 
__________________
Linux ist wie guter Sex, man kann es beschreiben oder drüber reden,
man weiß erst was es bedeutet, wenn man es erlebt hat.
ByteBreaker ist offline   Mit Zitat antworten
Antwort


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

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 anzufügen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Fehler in DB-Update, aber wo ? ByteBreaker Datenbanken 2 18.10.2005 21:57
[C++] Finde keinen Fehler - geht aber nicht. expose C / C++ 10 04.05.2003 20:02
[Volumen-Limit] Einsparung von MB beim IE, aber Wie? Christmas Burger Technisches Off-Topic 7 28.04.2003 21:50
Fehlermeldung: Column count doesn't match value count at row? FatalCrash PHP, Perl und ASP 1 10.08.2001 19:10
Hotkey Programm. Aber wo ist der Fehler??? dbr VisualBasic / VBScript 0 17.04.2001 17:29


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:00 Uhr.


[BuHa Edition]

Partnerboard:
mcseboard.de