Sakrament, das funktionert ja wirklich :-) - DANKE!!
Hier mal ein kleines Beispiel zur Illustration:
CREATE TABLE `produkte` ( `id` tinyint(4) NOT NULL );
INSERT INTO `produkte` VALUES (1);
INSERT INTO `produkte` VALUES (2);
INSERT INTO `produkte` VALUES (3);
CREATE TABLE `bewertungen` ( `produkt` tinyint(4) NOT NULL,
`bewertung` tinyint(4) NOT NULL);
INSERT INTO `bewertungen` VALUES (1, 1);
INSERT INTO `bewertungen` VALUES (1, 2);
INSERT INTO `bewertungen` VALUES (2, 1);
INSERT INTO `bewertungen` VALUES (2, 2);
INSERT INTO `bewertungen` VALUES (2, 1);
Dann erzeugt die Abfrage
SELECT * FROM produkte ORDER BY (SELECT COUNT(*) FROM bewertungen WHERE produkte.id=bewertungen.produkt) DESC;
das Resultat:
+----+
| id |
+----+
| 2 | <= Produkt Nr. 2 hat die meisten Bewertungen
| 1 |
| 3 |
+----+
So wie ich das jetzt verstehe, sind diese drei Bedingungen erforderlich:
*) Die Unterabfrage darf nur eine einzige Spalte enthalten. Sonst kommt die Fehlermeldung "Operand should contain 1 column(s)".
*) Die Unterabfrage darf nur eine einzige Zeile zurückliefern. Sonst kommt die Fehlermeldung "Subquery returns more than 1 row".
*) Die Unterabfrage muss eine WHERE-Klausel enthalten, über die eine Art temporäre Beziehung zwischen den korrespondierenden Feldern hergestellt wird. Sonst weiß "er" ja nicht, welchem Produkt er welchen COUNT-Wert zuordnen soll.
Stimmt das so?
Gibt's auch die Möglichkeit, dass ich die Sortierreihenfolge selber durch eine Art Liste (d.h. Unterabfrage) festlege? Also im obigen Beispiel sowas wie:
SELECT * FROM bewertungen ORDER BY produkt (3,1,2)