globe: MySQL-Abfrage mit Subquery - nur wie?

Beitrag lesen

n'abend,

Ich habe es wiefolgt versucht:
SELECT * FROM content WHERE id IN (SELECT content_id FROM rating ORDER BY points DESC LIMIT 5)

Falls da eine Fehlermeldung kommt, solltest du die dazu packen.

MySQL5 Subquery Errors

MySQL kann mit der LIMIT-Klausel in Subqueries bisweilen noch nichts anfangen. Glücklicherweise können Subqueries aber auch in Form von JOINs dargestellt werden:

SELECT *  
  FROM content c  
  JOIN rating r  
    ON r.content_id = c.id  
 ORDER BY r.points DESC  
 LIMIT 5;

Ich habe aber das Gefühl, dass du pro Datensatz in der Tabelle content mehrere verknüpfte Datensätze in der Tabelle rating hast. Vermutlich willst du die 5 Datensätze aus content haben, mit der größten _Gesamtpunktzahl_:

SELECT c.*, SUM(r.points) AS gesamtpunktzahl  
  FROM content c  
  JOIN rating r  
    ON r.content_id = c.id  
 GROUP BY r.content_id  
 ORDER BY gesamtpunktzahl DESC  
 LIMIT 5;

oder auch so:

SELECT c.*, r.gesamtpunkzahl  
  FROM content c  
  JOIN  
  (  
    SELECT content_id, SUM(points) AS gesamtpunktzahl  
      FROM rating  
     ORDER BY gesamtpunktzahl DESC  
     LIMIT 5  
  ) AS r  
    ON r.content_id = c.id;

Die letzte Query ist völlig in Ordnung, auch wenn sie erst mal ungewohnt ausschaut. Es handelt sich hierbei auch nicht um eine Subquery, sondern mehr um einen "Temporären View".

weiterhin schönen abend...

--
#selfhtml hat ein Forum?
sh:( fo:# ch:# rl:| br:> n4:& ie:{ mo:} va:) de:] zu:} fl:( ss:? ls:[ js:|