Dennis B.: MySQL: Order By mit Subquery

Beitrag lesen

Hallo,

ich habe folgendes Problem:

In meiner Datenbank stehen Artikel (db_articles). Die Tabelle db_articles sieht so aus:

id | Titel | fixedrating
1  | Prod. | 1
2  | P 2   | 0

in einer weiteren Tabelle (db_articles_ratings) sind Produktberwertungen der user gespeichert:

user_id | product_id | rating

Wenn ich nun das Benutzerrating zu einem Produkt haben will, lautet meine Abfrage ganz einfach:

SELECT AVG(rating) FROM db_articles_ratinge WHERE product_id=1.

Das geht auch soweit.

Nun soll es aber die Möglichkeit geben, einem Produkt eine feste und nicht veränderbare Bewertung durch den Administrator zukommen zu lassen. Diese wird dann in dem Artikel in "fixedrating" gespeichert.

Ist fixedrating gleich 0, wird die user-Bewertung zu Rate gezogen, sonst eben die fixed-Rating-Bewertung.

Soweit so gut, die Applikation leistet das aber auch. Nun möchte ich jedoch eine Produktliste von SQL holen, sortiert nach der Bewertung.

SELECT id FROM db_articles
ORDER BY fixedrating DESC, (
  SELECT AVG(rating) FROM db_articles WHERE product_id=id
) DESC

Das geht auch soweit. Nur, wenn ich weitere Felder der Order-by-Klausel hinzufüge, sortiert er natürlich nach fixedrating aufsteigend, d.h. alle Produkte ohne fixedrating erscheinen oben.

Ich muss also der Datenbank sozusagen die Logik beibringen:

wenn fixedrating > 0 dann sortiere nach fixed rating,
sonst sortierte nach select avg(....

Any hints?

Danke
D.