Ankündigung

Einklappen
Keine Ankündigung bisher.

SQL Abfrage für Voting System??

Einklappen

Neue Werbung 2019

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

  • SQL Abfrage für Voting System??

    Servus Leute,

    ich möchte gerne einen SQL Query haben.

    Folgende Situation:

    Eine Tabelle existiert, in der Votings (Abstimmungen) gespeichert sind, von 1 - 10, inklusive dem Mitgliedsnamen

    z.B.

    Voting Mitglied
    5 tester
    7 tester
    1 hubert
    4 elfriede
    5 hubert

    usw.

    Nun möchte ich einen SQL Query haben, der mir folgendes liefert.

    Er soll mir eine Ergebnistabelle ausgeben, in der das best bewerteste Mitglied oben steht, das zweitbeste dadrunter usw.

    Diese Rangliste soll mit einem Durchschnitt bestimmt werden.

    Wenn z.B. hubert 1x mit 5 und 1x mit 10 bewertet wurde, ist der durchschnitt 7,5.

    Und bei elfriede wurde 1x mit 5 und 1x mit 3 bewertet, ist der durchschnitt 4.

    Nun soll hubert mit 7,5 als erstes in der Ergebnistabelle stehen, und danach direkt elfriede usw.

    Wie mache ich das?

    Danke euch!!

  • #2
    Re: SQL Abfrage für Voting System??

    Zitat von becks123
    ich möchte gerne einen SQL Query haben.
    Du meinst Hilfe ihn selbst zu erstellen? Bist übrigens im falschen Board

    Bin leider kein SQL-Experte, aber vielleicht helfen dir die Funktionen SUM(voting) AS sv, und GROUP BY(mitglied) was.
    Zur Sortierung dann ORDER BY sv DESC

    Kommentar


    • #3
      wenn deine Tabelle außer den beiden genannten Spalten
      auch noch eine Spalte `Bewertung`hat,
      kannst du folgende Abfrage testen:
      Code:
      SELECT
         Mitglied,
         AVG(Bewertung) AS Durchschnitt
      FROM
         tabelle
      GROUP BY
         Mitglied
      ORDER BY
         Durchschnitt DESC
      ~dilemma~

      Kommentar


      • #4
        suuuper! hat geklappt...dank dir

        Kommentar


        • #5
          noch eine kurze Frage...habe jetzt folgenden Befehl gebastelt:

          Code:
          SELECT count(memId) as voteAnzahl, geschlecht, memId, picId, AVG( voteValue ) AS Durchschnitt FROM `vote_data` AS t1
          LEFT JOIN `mitglieder` AS t2 ON t1.memId = t2.ID
          WHERE t2.geschlecht = 'm'
          GROUP BY memId
          ORDER BY Durchschnitt DESC LIMIT 0, 10

          Jetzt hätte ich aber noch gerne die gesamte Anzahl an Datensätzen, die er gefunden hat, als Ausgabe. Da ich aber auch einen Teilausschnitt brauche (LIMIT 0, 10) weiß ich nicht genau, wie ich jetzt dennoch mit diesem Befehl die Anzahl der Datensätze auslesen kann.

          Weiß jemand Rat???

          Kommentar


          • #6
            Dafür kannst du den Zusatz SQL_CALC_FOUND_ROWS benutzen und anschließend mit SELECT FOUND_ROWS() die Anzahl der gesamten Datensätze ermitteln:

            Code:
             
            SELECT SQL_CALC_FOUND_ROWS
             
                COUNT(memID) AS voteAnzahl
             
            ...
             
            ORDER BY
             
                Durchschnitt DESC
             
            LIMIT
             
                0, 10;
             
            
             
            SELECT FOUND_ROWS()

            Kommentar


            • #7
              Wenn du mit >>> Anzahl der Datensätze <<<
              die Anzahl der ALLER Datensätze meinst,
              die in der Tabelle `vote_data` enthalten sind,
              musst du diese Anzahl separat abfragen.
              zB so:
              Code:
              SELECT
              count(*)
              FROM `vote_data`
              oder eventuell auch so:
              Code:
              SELECT
              count(*)
              FROM `vote_data` AS t1
              LEFT JOIN `mitglieder` AS t2
                 ON t1.memId = t2.ID
                    AND t2.geschlecht = 'm'
              WHERE
                 t2.geschlecht IS NOT NULL
              sorry:
              Ich verstehe deine Frage nicht so richtig ...

              ~dilemma~

              Kommentar


              • #8
                Zitat von dilemma
                sorry:
                Ich verstehe deine Frage nicht so richtig ...
                Ich vermute, dass becks123 die Anzahl der Datensätze benötigt, die er erhalten würde, wenn er das LIMIT weglassen würde. So etwas kann ja zum Beispiel für die Aufteilung auf mehrere Seiten sinnvoll sein.

                Kommentar


                • #9
                  genau xabbuh, so meinte ich das! Ich benötige das für eine Seitenaufteilung.

                  Nur geht das irgendwie nicht...

                  Der Query sieht jetzt so aus:

                  Code:
                  SELECT SQL_CALC_FOUND_ROWS
                      count(memID) AS Anzahl, geschlecht, memId, picId, AVG( voteValue ) AS Durchschnitt, count(memId) as Anzahl FROM `vote_data` AS t1
                  LEFT JOIN `mitglieder` AS t2 ON t1.memId = t2.ID
                  WHERE t2.geschlecht = 'w'
                  GROUP BY memId
                  ORDER BY Durchschnitt DESC LIMIT 0, 10
                  Nur weiß ich nicht, was ich mit "SELECT FOUND_ROWS()" anfangen soll.

                  Wo soll das hin?

                  Kannst du mir mal ein Beispiel angeben, wie ich das dann auslesen kann?

                  Danke!

                  Kommentar


                  • #10
                    SELECT FOUND_ROWS() ist auch eine MySQL-Abfrage, die du anschließend abschickst und genauso verarbeitest, wie du sonst auch mit SELECT-Statements vorgehst. Oder wo genau liegt da jetzt dein Problem?

                    Kommentar


                    • #11
                      Das sieht bei mir jetzt alles so aus....nur gibt der am Ende die Anzahl nicht aus mit " echo $result_all->Anzahl; "

                      Code:
                      $query = "
                      SELECT SQL_CALC_FOUND_ROWS
                          count(memID) AS Anzahl, geschlecht, memId, picId, AVG( voteValue ) AS Durchschnitt, count(memId) as Anzahl FROM `vote_data` AS t1
                      LEFT JOIN `mitglieder` AS t2 ON t1.memId = t2.ID
                      WHERE t2.geschlecht = '$ge'
                      GROUP BY memId
                      ORDER BY Durchschnitt DESC LIMIT $begin, 10 
                      ";
                      
                      
                        $result_top = mysql_query("$query") or die("Fehler: " . mysql_error());
                        
                        $all = mysql_query("SELECT FOUND_ROWS()");
                        $result_all = mysql_fetch_object($all);
                        
                        echo $result_all->Anzahl;

                      Kommentar


                      • #12
                        Wenn du auf $result_all->Anzahl zugreifen willst, musst du in der Abfrage SELECT FOUND_ROWS() auch den entsprechenden Alias definieren:
                        Code:
                        SELECT FOUND_ROWS() AS Anzahl

                        Kommentar


                        • #13
                          ah...super! stimmt

                          Geht! ich bedanke mich...dachte das wäre noch von dem vorherigen Query bei count As Anzahl...

                          danke!

                          Kommentar

                          Lädt...
                          X