Punkte berechnen via SQL

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Punkte berechnen via SQL

    Nabend.

    Ich habe folgende Tabellen:



    Die Tabelle tmn_ladder_times kann von jedem User mehrere Zeiten pro Map enthalten!

    Um zu selecten wer auf der Map z.B. n-race10 die beste Zeit hingelegt hat hab ich folgende Query:

    PHP-Code:
    SELECT * , MINa.time )
    FROM tmn_ladder_times atmn_ladder_user btmn_ladder_maps c
    WHERE c
    .name 'n-race10'
    AND a.map c.id
    AND a.user b.id
    GROUP BY b
    .login
    ORDER BY MIN
    a.time ASC 
    oder für die JOIN Fraktion

    PHP-Code:
    SELECT FROM tmn_ladder_times a
    LEFT JOIN tmn_ladder_user b ON a
    .user b.id
    LEFT JOIN tmn_ladder_maps c ON c
    .id a.map
    WHERE c
    .name 'n-race10'
    GROUP BY b.login
    ORDER BY MIN
    (a.time
    Result:


    Soweit so gut! Jetzt möcht ich via SQL Punkte verteilen. Platz 1. 25 Pkt., Platz 2. 12,5 Pkt., Platz 3. 6,25 Pkt..... usw.

    Irgendjemand ne Idee wie ich das realisieren kann? Klar kann ich das alles in meinem Script machen. Gibt es aber auch ne Lösung via SQL?

  • #2
    Re: Punkte berechnen via SQL

    PHP-Code:
    SET @punkte 50;

    SELECT * , MINa.time ), @punkte := @punkte AS punkte
    FROM tmn_ladder_times a
    tmn_ladder_user btmn_ladder_maps c
    WHERE c
    .name 'n-race10'
    AND a.map c.id
    AND a.user b.id
    GROUP BY b
    .login
    ORDER BY MIN
    a.time ASC
    oder sowas in der Art?

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Jo

      Sehr geil. Danke! Aber einen hab ich noch

      Das war jetzt ja nur für die Map n-race10. Ich hab so um die 200 Maps in der Tabelle. Also das ganze für die 200 Maps und dann bitte die Punkte pro User addieren.

      Kommentar


      • #4
        GROUP BY b.login, c.name WITH ROLLUP
        ?
        Die Where-Klausel natürlich weg

        Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

        bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
        Wie man Fragen richtig stellt

        Kommentar


        • #5
          Das Problem ist das ROLLUP und ORDER BY sich gegenseitig ausschließen.

          Kommentar


          • #6
            Spendier mal bitte einen Dump mit ein paar Test-Daten ~ so vollkommen ohne Ausprobieren ist doof ^^,

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Hier hast du

              http://www.schnoop.de/testdata.zip

              Kommentar


              • #8
                Die Punkte für alle Strecken
                Code:
                SET @alte_strecke = "";
                SET @punkte = 25;
                
                SELECT *, (@punkte := IF(@alte_strecke != name, 25, @punkte / 2)) AS punkte, @alte_strecke := name AS bla
                FROM (
                SELECT map, `time`, time_drive, date_drive, login, nick, first_time, name, vote, MIN( a.time ) min_time
                FROM tmn_ladder_times a, tmn_ladder_user b, tmn_ladder_maps c
                WHERE a.map = c.id
                AND a.user = b.id
                GROUP BY b.login, c.name
                ORDER BY c.name, MIN( a.time ) ASC
                ) d
                Daraus die Punkte pro User über alle Strecken
                Code:
                SET @alte_strecke = "";
                SET @punkte = 25;
                
                SELECT login, SUM(punkte) FROM (
                SELECT *, (@punkte := IF(@alte_strecke != name, 25, @punkte / 2)) AS punkte, @alte_strecke := name AS bla
                FROM (
                SELECT map, `time`, time_drive, date_drive, login, nick, first_time, name, vote, MIN( a.time ) min_time
                FROM tmn_ladder_times a, tmn_ladder_user b, tmn_ladder_maps c
                WHERE a.map = c.id
                AND a.user = b.id
                GROUP BY b.login, c.name
                ORDER BY c.name, MIN( a.time ) ASC
                ) d
                ) e
                GROUP BY login

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar

                Lädt...
                X