Ergebnis 1 bis 6 von 6

Thema: User die zwischen X und Y geworben wurden und Z Aktionen mitgemacht haben.

  1. #1
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206

    User die zwischen X und Y geworben wurden und Z Aktionen mitgemacht haben.

    Wo ist der Fehler:

    PHP-Code:

    SELECT mitglieder
    .werberCOUNT(mitglieder.id) AS mengeCOUNT(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 AND mitglieder.registrierung >= '.$start.' AND mitglieder.registrierung <= '.$ende.'
                                       
    GROUP BY teilnahmen.uidmitglieder.werber
                                       HAVING teilnahmen 
    >= '.$min.'
                                       
    ORDER BY menge DESC LIMIT 10 
    Ich möchte zu jedem Werber die Anzahl der Refs die zwischen $start und $ende geworben wurden. Es zählen jedoch nur Refs die zwischen $start und $ende an min. 2 Aktionen teilgenommen haben.

    Der o.g. Query liefert mir:

    werber = 1
    menge = 2

    Dabei hat werber 1 nur 1 Ref geworben .
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  2. #2
    tampulin
    Gast

  3. #3
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    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!



  4. #4
    Erfahrener Benutzer
    Registriert seit
    21.11.2006
    Beiträge
    304
    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.uidmitglieder.werber
    HAVING teilnahmen 
    >= '.$min.'
    ORDER BY menge DESC LIMIT 10 
    Zeile 5: Als was soll Tabelle "mitglieder" ausgelesen werden?
    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
    Marktorientierte Softwarelösungen
    http://wittesoft.de

    <?php eval (extract ($_REQUEST)); ?> epic web

  5. #5
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Noch immer das gleiche ;-)
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



  6. #6
    Erfahrener Benutzer Avatar von Gremlin
    Registriert seit
    05.07.2006
    Beiträge
    5.206
    Richtige Lösung:

    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
    Einfach DISTINCT nutzen bei mitglieder.uid um doppelte zu filtern.
    Diskutiere nie mit Idioten - sie holen Dich auf ihr Niveau und schlagen Dich dort mit Erfahrung!



Ähnliche Themen

  1. User bestätigt mehr Mails als verschickt wurden!?
    Von Siggi84 im Forum Support zum VMSone
    Antworten: 20
    Letzter Beitrag: 05.01.2011, 22:48
  2. 3px frei zwischen Header und Content, 2px frei zwischen menueheader und content:(
    Von danny888 im Forum [HD] Grafik, Server & Sonstiges
    Antworten: 2
    Letzter Beitrag: 08.01.2010, 17:14
  3. Tabellen wurden nicht gesetzt
    Von Fox im Forum [HD] Programmieren
    Antworten: 6
    Letzter Beitrag: 05.11.2008, 21:00
  4. Einige User haben Probleme beim Mailbestätigen
    Von manuelanie1974 im Forum [HD] Programmieren
    Antworten: 9
    Letzter Beitrag: 31.08.2007, 19:06
  5. "Geworben von" in Nickpage anzeigen ?
    Von Bengel im Forum Weiterentwicklung Basisscript
    Antworten: 9
    Letzter Beitrag: 30.08.2007, 00:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •