SQL-Query für bestimmte Menge von Elementen

Timbonet

Erfahrenes Mitglied
Hallo,

wie könnte man folgende Abfrage verbessern? Das mit der while()-Schleife gefällt mir nicht. Im Prinzip sollte noch eine Abfrage wie "WHERE stimmen >= '3'" mit rein, das ergibt aber einen Fehler.

PHP:
$query = "select *, (sum(wertung)/count(wertung)) AS wert, count(bild) AS stimmen from bilderstimmen GROUP BY bild ORDER BY wert DESC, stimmen DESC";
	$bildresult = mysql_query($query);
	$counter = 1;
	while ($temp = mysql_fetch_array($bildresult))
	{
		if ($temp['stimmen'] >= 3) $zeile[$counter++] = $temp;
	}

Die Daten in der Tabelle sind alles INT-Werte.
 
Es kommt wahrscheinlich auf den typ des feldes an.
Wenn das Feld ein Varchar ist wird es wohl schwer sein "WHERE stimmen >= '3'" abzufragen, aber bei einem int sollte: " Where stimmen>=3" funktionieren.
Where-Optimization
 
Ne, geht leider nicht. "stimmen" wird ja erst bei der Abfrage mit count(bild) belegt, ist also eine Zahl. Die Tabelle an sich besteht aus id, mitglied, bild, wertung -> alles INT-Werte. Darin sind praktisch die Bewertungen (1-5) eines Bildes durch die Mitglieder abgelegt. Ich will damit praktisch die Bilder mit den besten Bewertungen ausgeben - eigentlich noch mit einem LIMIT, das geht aber bei der von mir benutzten Version des Codes nicht.
 
Zuletzt bearbeitet:
Er sagte doch dass das Feld in der Tabelle ein Int sein muss!

Feld Typ "VarChar": Können Zahlen und Buchstaben rein.
Feld Typ "Int": Können ausschließlich Zahlen rein.
 
_voodoo hat gesagt.:
Er sagte doch dass das Feld in der Tabelle ein Int sein muss!

Feld Typ "VarChar": Können Zahlen und Buchstaben rein.
Feld Typ "Int": Können ausschließlich Zahlen rein.

Tja, "stimmen" ist wie oben beschrieben kein Feld der Tabelle. Welche Daten die einzelnen Typen aufnehmen stand ja auch nicht zur Debatte. Wie bereits mehrfach beschrieben, sind alle Felder INT.
Die Version ist 4.1.7.
 
MySQL beherrscht soweit ich weiß ab Version 4.1 den Subselect.
Folgende Abfrage sollte rein theoretisch funktionieren:
PHP:
 $query = "select a.*, 
   (sum(a.wertung)/count(a.wertung)) AS wert, 
   count(a.bild) AS stimmen 
from bilderstimmen AS a
WHERE (SELECT count(bild) FROM bilderstimmen WHERE id = a.id) >= 3
GROUP BY a.bild 
ORDER BY a.wert DESC, a.stimmen DESC";

Bloddy
 
Das hat mich auf den richtigen Weg gebracht. Danke :)
Der fertige Query (es mußte beim Subselect nicht die ID, sondern das Bild verglichen werden):
PHP:
SELECT a . * , (
sum( a.wertung ) / count( a.wertung ) 
) AS wert, count( a.bild ) AS stimmen
FROM bilderstimmen AS a
WHERE (
SELECT count( bild ) 
FROM bimbel_bilderstimmen
WHERE bild = a.bild
) >=3
GROUP BY a.bild
ORDER BY wert DESC , stimmen DESC
 
Zurück