Announcement

Collapse
No announcement yet.

MySQL Abfrage Problem

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MySQL Abfrage Problem

    Hallo,
    ich hab ein Problem mit meine MySQL Abfrage.
    Sie sieht wie folgt aus:

    Code:
    SELECT rooms.id, rooms.state, rooms.showname, rooms.visitors_now, rooms.visitors_max, rooms.name, rooms.description, rooms.owner, SUM( room_votes.vote )
    FROM rooms, room_votes
    WHERE rooms.id = room_votes.roomid
    GROUP BY rooms.id
    Ich habe zwei Tabellen, nämlich rooms und room_vote.
    Ich möchte einige Raumdaten der rooms Tabelle abfragen und die Summe aller Bewertungen, die die User gegeben haben abrufen.
    (Ein User kann nur dafür (+1) oder dagegen (-1) stimmen).
    Mein Problem: Ich möchte aber auch Räumedetails von den Räumen wissen, die nicht bewertet wurden.
    Das liegt wohl an "WHERE rooms.id = room_votes.roomid".

    Wie lös ich das auf Grund des hohen Datenaufkommen in einer Abfrage? Danke im Voraus!

  • #2
    SELECT rooms.id, rooms.state, rooms.showname, rooms.visitors_now, rooms.visitors_max, rooms.name, rooms.description, rooms.owner,
    SUM( room_votes.vote )
    FROM rooms left join room_votes
    on rooms.id = room_votes.roomid
    GROUP BY rooms.id

    Gruß
    docendo discimus

    Comment


    • #3
      Originally posted by frauwue View Post
      SELECT rooms.id, rooms.state, rooms.showname, rooms.visitors_now, rooms.visitors_max, rooms.name, rooms.description, rooms.owner,
      SUM( room_votes.vote )
      FROM rooms left join room_votes
      on rooms.id = room_votes.roomid
      GROUP BY rooms.id

      Gruß
      Das wird so nicht funktionieren. Bei Group By müssen alle Felder die keine Aggregatfelder (SUM, MAX,...) sind in der GROUP BY Klausel stehen.

      [highlight=sql]
      SELECT r1.id, r2.roomVote, r1.state, r1.showname, r1.visitors_now, r1.visitors_max, r1.name, r1.description, r1.owner
      FROM
      rooms r1,
      (
      SELECT rooms.id as roomId, SUM( room_votes.vote ) as roomVote
      FROM rooms LEFT JOIN room_votes
      ON rooms.id = room_votes.roomid
      GROUP BY rooms.id
      ) r2
      WHERE r1.id = r2.roomId
      [/highlight]

      Das geht natürlich nur, wenn die Version deiner MySQL DB subqueries unterstützt.

      Comment


      • #4
        Sorry hatte auf die schnelle vergessen, die anderen Felder mit in die Gruppierung zu schreiben. Ich gehe davon aus, dass es pro ID nur einen Datensatz gibt. Deshalb könnte es so klappen:

        SELECT rooms.id, rooms.state, rooms.showname, rooms.visitors_now, rooms.visitors_max, rooms.name, rooms.description, rooms.owner,
        SUM( room_votes.vote )
        FROM rooms left join room_votes
        on rooms.id = room_votes.roomid
        GROUP BY rooms.id, rooms.state, rooms.showname, rooms.visitors_now, rooms.visitors_max, rooms.name, rooms.description, rooms.owner
        docendo discimus

        Comment

        Working...
        X