PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [SQL] Fehler beim Count...aber wo?



breaker
10.11.2009, 12:18
Moin :)
Heute komme ich mal wieder mit einem speziellen Problem :D

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

Jetzt will ich alle Einträge aus "kategorien" auslesen, passen dazu die Anzahl der Aktionen, 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



$sql1 = $this->db->sql_query("SELECT
kat.*,
bo.*,
COUNT(bo.kat_id) AS aktionen_in_kat,
COUNT(teil.k_code) AS user_teilgenommen
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 ;)

jpwfour
10.11.2009, 16:33
COUNT(bo.kat_id) AS aktionen_in_kat,
COUNT(teil.k_code) AS user_teilgenommen

sollte ja beides immer gleich sein?

breaker
10.11.2009, 18:39
COUNT(bo.kat_id) AS aktionen_in_kat,
COUNT(teil.k_code) AS user_teilgenommen

sollte ja beides immer gleich sein?




Sollte eigentlich nicht...wenn ich allerdings in der Kategorie 3 Aktionen habe und der User allerdings mehr als 2 mal Teilnimmt, dann erhöhen sich die Anzahl der Aktionen (in dieser Kat) und die Teilnahmen je um 1.....vorher (bei 0-2 Teilnahmen, bei 3 Aktionen in der Kat) stimmt aber alles

jpwfour
10.11.2009, 21:13
COUNT zählt halt die Zeilen der Ergebnismenge, in der die angegebene Spalte ungleich NULL ist.

Insofern bietet es sich in nur wenigen Fällen an, mehr als 1 COUNT in einem Query zu haben.

Evtl. hilft dir COUNT(DISTINCT ...) weiter.

breaker
10.11.2009, 22:25
COUNT zählt halt die Zeilen der Ergebnismenge, in der die angegebene Spalte ungleich NULL ist.

Insofern bietet es sich in nur wenigen Fällen an, mehr als 1 COUNT in einem Query zu haben.

Evtl. hilft dir COUNT(DISTINCT ...) weiter.


Hmm....man kann richtig gut in irgendwas sein....es gibt immer welche, die noch besser sind :D

Jetzt stimmt zumindest die Anzahl der Aktionen pro Kategorie und die Anzahl der gesamten teilnahmen pro Kategorie...ich teste das aber mal weiter, Danke dir erstmal. Mein Lösungansatz war zumindest verdammt nahe dran :D