Also wenn ich das ändere z.B. auf AS teilnahmen2 ändert es nichts an der Sache. Werden trotzdem noch 2 Refs angezeigt.
mitglieder.status ist im mom enum('wartend', 'aktiv', 'gesperrt')
Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!
Zeile 5: Als was soll Tabelle "mitglieder" ausgelesen werden?PHP-Code:
SELECT
mitglieder.werber,
COUNT(mitglieder.id) AS menge,
COUNT(teilnahmen.id) AS teilnahmen
FROM mitglieder
LEFT JOIN teilnahmen
ON (teilnahmen.uid = mitglieder.id)
AND (teilnahmen.zeit >= '.$start.')
AND (teilnahmen.zeit <= '.$ende.')
WHERE mitglieder.status = "aktiv"
AND mitglieder.werber > 0
AND mitglieder.registrierung >= '.$start.'
AND mitglieder.registrierung <= '.$ende.'
GROUP BY teilnahmen.uid, mitglieder.werber
HAVING teilnahmen >= '.$min.'
ORDER BY menge DESC LIMIT 10
Zeile 6: Als was die Tabelle "teilnahmen"?
Zeile 11: Ein "<>" ist in der MySQL-Syntax günstiger als die PHP-Operatoren ">"
Zeile 12: Auch PHP-Operatoren
Zeile 13: Auch PHP-Operatoren
Zeile 16: "LIMIT 0,10" ist richtiger
Ist die Kollation beider Tabellen gleich?
Wenn nicht, gibts ein mixed-Error
Noch immer das gleiche ;-)
Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!
Richtige Lösung:
Einfach DISTINCT nutzen bei mitglieder.uid um doppelte zu filtern.Code:SELECT mitglieder.werber, COUNT(DISTINCT mitglieder.id) AS menge, COUNT(teilnahmen.id) AS teilnahmen FROM mitglieder LEFT JOIN teilnahmen ON teilnahmen.uid=mitglieder.id AND teilnahmen.zeit >= '.$start.' AND teilnahmen.zeit <= '.$ende.' WHERE mitglieder.status="aktiv" AND mitglieder.werber > 0 AND mitglieder.registrierung >= '.$start.' AND mitglieder.registrierung <= '.$ende.' GROUP BY teilnahmen.uid, mitglieder.werber HAVING teilnahmen >= '.$min.' ORDER BY menge DESC LIMIT 10
Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!