kölir: nach durchschnitt 2er zeilen sortieren

Hallo,

ich möchte aus einer MySql-Tabelle den Eintrag, bei dem der Durchschnitt 2er Spalten am höchsten ist herausfinden, dafür will ich sie danach sortieren.

Also folgende Tabelle:
beitrag | bewertung sehr gut | bewertung sehr schlecht
   1              100                    200
   2              500                    100

Nun möchte ich den Beitrag 2, da bei ihm der Durchschnitt
    1.83 = 500 * 1 + 100 * 6) / (500 + 100)
beträgt.

Leider weiß ich nicht, wie ich das bewerkstellige

Gtüßchen

  1. Hi,

    ich möchte aus einer MySql-Tabelle den Eintrag, bei dem der Durchschnitt 2er Spalten am höchsten ist herausfinden, dafür will ich sie danach sortieren.

    Also folgende Tabelle:
    beitrag | bewertung sehr gut | bewertung sehr schlecht
       1              100                    200
       2              500                    100

    Nun möchte ich den Beitrag 2, da bei ihm der Durchschnitt
        1.83 = 500 * 1 + 100 * 6) / (500 + 100)
    beträgt.

    Du kannst die Rechnung einfach so nach order by hinschreiben:
    SELECT * FROM tabelle ORDER BY ((bewertung sehr gut*1+bewertung sehr schlecht * 6)/(500 + 100));

    mfG,
    steckl

    1. Hallo,

      danke!

      Aber wie muss ich die Spaltenvariblen in der Rechnung korrekt escapen?

      $abfrage='SELECT * FROM tabelle ORDER BY ((bewertung sehr gut*1+bewertung sehr schlecht * 6)/(500 + 100))';

      hat nicht geklappt.

      Gruß

      1. Hi,

        Aber wie muss ich die Spaltenvariblen in der Rechnung korrekt escapen?

        $abfrage='SELECT * FROM tabelle ORDER BY ((bewertung sehr gut*1+bewertung sehr schlecht * 6)/(500 + 100))';

        Ich kann kein PHP, aber mysql_escape_string() schaut nicht schlecht aus. Wenn das nicht klappt versuchst mit Backslash zu maskieren.

        Außerdem hoffe ich, dass du tabelle durch den Namen deiner Tabelle ersetzt hast.

        Wenns immer noch nicht klappt wärs wohl am besten, wenn du mal die Fehlermeldung mit postest.

        mfG,
        steckl

        1. Hallo,

          es gibt keine Fehlermeldung, aber es wird einfach immer der erstbeste Datensatz abgerufen und nicht der, der nach diese Ordnung der erste wär.

          Solange ich nur nach einer Spalte sortiere
          "ORDER BY spalte1"
          klappt es, probiere ich jedoch die Rechnung einzubauen
          "ORDER BY (spalte1 + spalte2)"
          funktioniert es nichtmehr.

          Kann mir jemand sagen, was an meine query nicht stimmt?

          $abfrage='SELECT * FROM tabelle ORDER BY ((bewertung sehr gut*1+bewertung sehr schlecht * 6)/(500 + 100))';

          Gruß

          1. Hallo,

            ich habe es hingekriegt es funktioniert jetzt.

            Jetzt ist nur noch die Frage, ob ich nach diesem Wert sortieren soll und dann einfach nur den ersten abrufen mit LIMIT oder ob es eine andere Möglichkeit gibt, den Datensatz mit dem höchsten durschnittswert abzurufen.

            Gruß

            1. Hi,

              ich habe es hingekriegt es funktioniert jetzt.

              Vielleicht interessiert es mal jemanden, der das gleiche Problem hat, wie die Lösung aussieht.

              Jetzt ist nur noch die Frage, ob ich nach diesem Wert sortieren soll und dann einfach nur den ersten abrufen mit LIMIT oder ob es eine andere Möglichkeit gibt, den Datensatz mit dem höchsten durschnittswert abzurufen.

              Das geht mit MAX().

              mfG,
              steckl

              1. Hallo,

                also die Lösung sieht so aus:

                $abfrage='SELECT * FROM tabelle ORDER BY ((bewertung_1+bewertung_2*2)/(bewertung_1+bewertung_2*2)) LIMIT 0,1';

                Wie meinst Du das mit MAX() ?

                Ich möchte den Datensatz, bei dem der durchschnitt am höchsten ist, aber folgendes klappt nicht:
                $abfrage='SELECT * FROM tabelle MAX(bewertung_1)';

                Wie muss ich das denn notiren?

                Gruß

                1. Hi,

                  Beispiel:
                  SELECT spalte1,max(spalte2+spalte3) form tabelle;

                  ... jetz muss i aber los.

                  Schönen Abend noch mit deiner DB ;-)
                  steckl

                  1. Hallo,

                    danke, aber ich sehe meinen Fehler immernoch nicht:

                    $abfrage='SELECT spalte1, max(bewertung) FROM tabelle';

                    leider sagt mir php daraufhin das hier:
                    mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 53
                    1

                    Wo liegt mein Fehler?

                    Außerdem möchte ich ja den kompletten Datensatz , bei dem der durchschnitt der höchste ist. Wenn ich mich nicht irre, würde ich aber mit einer Abfrage wie oben, die beste Bewertung abfrage und zusätzlich alle Datensätze ...

                    Gruß

                    1. Hi,

                      mysql_fetch_array(): supplied argument is not a valid MySQL result resource in test.php on line 53
                      1

                      Wo liegt mein Fehler?

                      Darin, daß Du mysql_error() nicht nutzt.

                      cu,
                      Andreas

                      --
                      Warum nennt sich Andreas hier MudGuard?
                      O o ostern ...
                      Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                2. Hi,

                  ORDER BY ((bewertung_1+bewertung_2*2)/(bewertung_1+bewertung_2*2))

                  Übersehe ich was oder ist das gleichbedeutend mit
                  ORDER BY 1
                  (bis auf den Fall bewertung_1 == 0 && bewertung_2 == 0, bei dem ORDER BY 1 keine Fehlermeldung ergibt, obiger Ausdruck aber eine Division by zero schmeißt)

                  cu,
                  Andreas

                  --
                  Warum nennt sich Andreas hier MudGuard?
                  O o ostern ...
                  Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
                  1. Hi,

                    Hi,

                    ORDER BY ((bewertung_1+bewertung_2*2)/(bewertung_1+bewertung_2*2))

                    Übersehe ich was oder ist das gleichbedeutend mit
                    ORDER BY 1
                    (bis auf den Fall bewertung_1 == 0 && bewertung_2 == 0, bei dem ORDER BY 1 keine Fehlermeldung ergibt, obiger Ausdruck aber eine Division by zero schmeißt)

                    Korrektur: bis auf den Fall (bewertung_1+bewertung_2*2 == 0)

                    cu,
                    Andreas

                    --
                    Warum nennt sich Andreas hier MudGuard?
                    O o ostern ...
                    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.