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

  • becks123
    hat ein Thema erstellt SQL Abfrage für Voting System??.

    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!!

  • becks123
    antwortet
    ah...super! stimmt

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

    danke!

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    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

    Einen Kommentar schreiben:


  • becks123
    antwortet
    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;

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    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?

    Einen Kommentar schreiben:


  • becks123
    antwortet
    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!

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    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.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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~

    Einen Kommentar schreiben:


  • xabbuh
    antwortet
    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()

    Einen Kommentar schreiben:


  • becks123
    antwortet
    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???

    Einen Kommentar schreiben:


  • becks123
    antwortet
    suuuper! hat geklappt...dank dir

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    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~

    Einen Kommentar schreiben:


  • Zergling-new
    antwortet
    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

    Einen Kommentar schreiben:

Lädt...
X