Bewertungs-Abfrage

Dieses Thema im Forum "Webentwicklung" wurde erstellt von master2005, 31. März 2010 .

  1. 31. März 2010
    Hallo @ all

    habe ein kleines Denkproblem und kriege das irgendwie alleine nicht hin.

    Wollte kurz ein kleines Bewertungssystem schreiben. Habe in der DB eine Tabelle mit objekte (Was will ich bewerten wird dort hinterlegt.) und eine Tabelle mit bewertungen (wird jeweils eingetragen die schriftliche Bewertung mit Sternen von den jeweiligen Objekten.)

    Es gibt ein Sterne-Sytsem sprich 5 Sterne ist die beste Bewertung. Die Anzahl der Sterne wird aber immer erst errechnet neu und ist nicht hinterlegt fix.

    Meine Frage:

    Wie kann ich die DB am besten abfragen um die z.B. 5 best bewerteten Objekte auszugeben da es ja in der DB keine fixe Sterne anzahl gibt sondern immer nur von den Usern die einzelne.?
     
  2. 31. März 2010
    AW: Bewertungs-Abfrage

    Code:
    SELECT *, count(*) as `count` FROM `bewertungen` GROUP BY `id` ORDER BY `count` DESC
    Damit bekommst du alle Bewertungen jewals als eine id zusammengezählt als "count"
     
  3. 31. März 2010
    AW: Bewertungs-Abfrage

    Danke für deine Hilfe aber ich muss ja die anzahl der vergebenen Sterne teilen durch die anzahl der user die sie gegeben haben ?

    z.B. 10 User haben insgesamt 24 Sterne vergeben -> 24 / 10 = 2,4 = 2Sterne
     
  4. 31. März 2010
    AW: Bewertungs-Abfrage

    Code:
    SELECT *, count(*) as `count`, sum(`sterne`) as `sterne` FROM `bewertungen` GROUP BY `id` ORDER BY `count` DESC
    Bitte!
     
  5. 31. März 2010
    AW: Bewertungs-Abfrage

    hhmm irgendwie klappt dies nicht

    stimmt das so =

    SELECT *, count(*) as `sterne`, sum(`id`) as `id` FROM `bewertungen` GROUP BY `bewertungs_id` ORDER BY `sterne` DESC


    Die DB sieht so aus

    bewertungen:

    id
    sterne
    bewertungs_id
     
  6. 31. März 2010
    AW: Bewertungs-Abfrage

    Code:
    SELECT *, count(*) as `count`, sum(`sterne`) as `count_sterne` FROM `bewertungs_id` GROUP BY `bewertungs_id` ORDER BY `count` DESC
    Ich geh mal davon aus das "bewertungs_id" bestimmt zu welchem Objekt die Bewertung gehört!

    Ausgabe:
    • id
    • sterne
    • sterne_count
    • count
    • bewertungs_id
     
  7. 31. März 2010
    AW: Bewertungs-Abfrage

    ah ok... Kann ich nicht schon in der Abfrage anzahl sterne und anzahl bewertungen teilen ?
     
  8. 31. März 2010
    AW: Bewertungs-Abfrage

    hab ich schonmal gemacht.
    meine abfrage ist wie die von nanobyte
    Code:
    mysql_query('SELECT uid, SUM(vote) as svote, (COUNT(vote)-1) as cvote, (SUM(vote)/(COUNT(vote)-1)) as rate FROM '.$dbtable.'vote WHERE activ=1 GROUP BY uid ORDER BY rate DESC');
    
    die tabelle sieht so aus
    Code:
    id uid userid vote datum guest activ
    
     
  9. 4. April 2010
    AW: Bewertungs-Abfrage

    mit dem dividieren klappt irgendwie nicht.

    Meine Abfrage

    SELECT *, count(*) as `bws`, sum(`sterne`) as `multi_sterne`, (SUM(`sterne`)/(COUNT(`bws`))) as ausgabe FROM `bewertungen` GROUP BY `bewertungs_id` ORDER BY `sterne` DESC


    Was ist den daran falsch ? es muss aufjedenfall hier dran liegen

    (SUM(`sterne`)/(COUNT(`bws`))) as ausgabe

    aber wüsste nicht wie ich es sonst schreiben soll

    mfg
     
  10. 4. April 2010
    AW: Bewertungs-Abfrage

    wieso denn nochmal SUM und COUNT - die hast du doch schon mit `bws` und `multi_serne`?

    fehlermeldung?
     
  11. 5. April 2010
    AW: Bewertungs-Abfrage

    um zu dividieren ???

    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\test2.php on line 8
     
  12. 5. April 2010
    AW: Bewertungs-Abfrage

    Code:
    SELECT 
     COUNT(*) `bws`, 
     SUM(`sterne`) `multi_sterne`, 
     ( `multi_sterne` / `bws` ) `ausgabe` 
    FROM `bewertungen` 
    GROUP BY `bewertungs_id` 
    ORDER BY `sterne` DESC
     
  13. 5. April 2010
    AW: Bewertungs-Abfrage

    Müsste es nicht Heißen:

    Code:
    SELECT 
     COUNT(*) AS `bws`, 
     SUM(`sterne`) AS `multi_sterne`, 
     ( `multi_sterne` / `bws` ) AS `ausgabe` 
    FROM `bewertungen` 
    GROUP BY `bewertungs_id` 
    ORDER BY `ausgabe` DESC
     
  14. 5. April 2010
    AW: Bewertungs-Abfrage

    nein, ein "as" ist in diesem fall nicht notwendig.

    MySQL :: MySQL 5.1 Referenzhandbuch :: 13.2.7 SELECT
     
  15. 6. April 2010
    AW: Bewertungs-Abfrage

    also bei dieser abfrage

    SELECT
    COUNT(*) `bws`,
    SUM(`sterne`) `multi_sterne`,
    ( `multi_sterne` / `bws` ) as `ausgabe`
    FROM `bewertungen`
    GROUP BY `bewertungs_id`
    ORDER BY `sterne` DESC


    Gibt es immer noch folgende Fehlermeldung


    Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\test2.php on line 16



    Danke das Ihr mir so helft
     
  16. 6. April 2010
    AW: Bewertungs-Abfrage

    diese fehlermeldung bedeutet, dass der query fehlschlug.
    schreib nach der ausführung mal "print mysql_error();" in den quelltext.
     
  17. 6. April 2010
    AW: Bewertungs-Abfrage

    COUNT(*)
    was soll er den counten?
    id, sterne, name ...

    bws nimmst du zur berechnung.
    probier mal COUNT(`sterne`) oder was auch immer
     
  18. 6. April 2010
    AW: Bewertungs-Abfrage

    Dann erhalte ich

    Unknown column 'multi_sterne' in 'field list'
     
  19. 6. April 2010
    AW: Bewertungs-Abfrage

    rechne "multi_sterne" und "bws" einfach mit php

    PHP:
    // der query ...

    while( $row  mysql_fetch_object ( $query )) {
        
    $ausgabe  $row -> multi_sterne  $row -> bws ;
        
    //etc ...
    }
     
  20. 6. April 2010
    AW: Bewertungs-Abfrage

    würde ich ja aber ich will ja die zb 10 besten bewertetet XY ausgeben....
     
  21. 6. April 2010
    AW: Bewertungs-Abfrage

    dann hau ein limit rein und lass die anderen aliase weg...

    Code:
    SELECT
     COUNT(*) / SUM(`sterne`) `ausgabe`
    
    FROM `bewertungen`
    GROUP BY `bewertungs_id`
    ORDER BY `ausgabe` DESC
    LIMIT 10
     
  22. 6. April 2010
    AW: Bewertungs-Abfrage

    ich möchte ja von allen die besten 10 ausgeben.... Danke euch allen aber trotzdem werde dann mal weiter google und lesen...
     
  23. 17. April 2010
    AW: Bewertungs-Abfrage

    ich muss ja dann alle einträge durchlaufen oder ?= ?
     
  24. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.