Top-Produkte

drabbit

Mitglied
Hallo zusammen,

ich habe folgende Aufgabenstellung: Für eine Statisktik würde es mich interessieren welches Produkt am Meisten verkauft wurde - ich habe dafür eine Tabelle mit folgenden Feldern:

bestellung:
id | orderid | kundenid | produktid | prodkatid | menge | datum | status


Diese Tabelle ist praktisch der Warenkorb. Mir scheint als wäre es sinnvoll die Summe der Menge zu erzeugen und das ganze mit Order By Produktid abfallend ausgeben zu lassen und je nach dem wie viele zeilen ich mir anzeigen lasse habe ich bei der ausgabe dann eine top 3/5/10/...

Meine SQL-Abfrage lautet bis jetzt so:
PHP:
$sql = "SELECT produktid, produktkatid, sum(menge) FROM bestellung ORDER BY produktid DESC";

Leider fuktioniert der Code überhaupt nicht.


Hier ist der Gesamte Code:
PHP:
   <?

// Datenbankverbindung aufbauen 
	$db_user = 'pizza';
	$db_pass = 'pronto';
	$db_host = 'localhost';
// Verbinden
	$dblink = mysqli_connect($db_host, $db_user, $db_pass);
	$selected = mysqli_select_db($dblink, 'pizza');
	
	if (!$selected) {
	die ('Cannot use DB : '.mysqli_error($dblink));
	}
	
	mysqli_set_charset($dblink, 'utf8');

$sql = "SELECT produktid, produktkatid, sum(menge) FROM bestellung ORDER BY produktid DESC"; 
$result = mysqli_query($dblink,$sql);




// Ausgabe auf der Seite

$num_results = $result->num_rows;

echo 'Anzahl gefundener Bestellungen:' . $num_results . '<br /><br />';

echo '<table border="1">';
echo '<tr> <td>id</td><td>Best. ID</td> <td>Kunden ID</td> <td>Prod. Kat</td> <td>Prod.</td><td>Menge</td></tr>'; 



for ($i = 0; $i < $num_results; $i++){
	$row = $result->fetch_assoc();
 echo "<tr>"; 
 echo "<td>". $id = $row['id'] . "</td>";
 echo "<td>". $row['orderid'] . "</td>";
 echo "<td>". $row['kundenid'] . "</td>";
 echo "<td>". $row['produktid'] . "</td>";
 echo "<td>". $row['prodkatid'] . "</td>";
 echo "<td>". $row['menge'] . "</td>";

 echo "</tr>";

 }
 echo "</table>";


?>

Jetzt bin ich gespannt was ich da wieder falsch gemacht habe, ich bin mir sicher ihr könnt mir da weiter helfen. lg
 
probier mal :
PHP:
$sql = "SELECT produktid, produktkatid, sum(menge) as anzahl FROM bestellung ORDER BY anzahl DESC";  ]
 
probier mal :
PHP:
$sql = "SELECT produktid, produktkatid, sum(menge) as anzahl FROM bestellung ORDER BY anzahl DESC";  ]

Klappt leider auch nicht - auch wenn ich die syntax bereinige (am Ende steht ein ] was da nicht sein sollte...)

OK ich bin schon draufgekommen... Hab Felder mit einem Falschen Namen angesprochen...

so funtioniert es jetzt
PHP:
$sql = "SELECT produktid, prodkatid, sum(menge) FROM bestellung ORDER BY produktid DESC";





Leider zählt er aber alle mengen zusammen... wie muss ich es formulieren dass er nur die Felder zählt wo die ID gleich ist?

Nun habe ich eine Lösung am Code oben habe ich die lösung:

sql:
PHP:
$sql = "SELECT produktid, prodkatid, sum(menge) FROM bestellung group by(produktid) ORDER BY menge DESC";


gesamte code:
<?

// Datenbankverbindung aufbauen
$db_user = 'pizza';
$db_pass = 'pronto';
$db_host = 'localhost';
// Verbinden
$dblink = mysqli_connect($db_host, $db_user, $db_pass);
$selected = mysqli_select_db($dblink, 'pizza');

if (!$selected) {
die ('Cannot use DB : '.mysqli_error($dblink));
}

mysqli_set_charset($dblink, 'utf8');

$sql = "SELECT produktid, prodkatid, sum(menge) FROM bestellung group by(produktid) ORDER BY menge DESC";
$result = mysqli_query($dblink,$sql);


// Ausgabe auf der Seite

$num_results = $result->num_rows;

echo 'Am meisten bestellt werden:<br /><br />';

echo '<table border="1">';
echo '<tr> <td>Prod. Kat</td> <td>Prod.</td><td>Menge</td></tr>';



for ($i = 0; $i < $num_results; $i++){
$row = $result->fetch_assoc();
echo "<tr>";
echo "<td>". $row['produktid'] . "</td>";
echo "<td>". $row['prodkatid'] . "</td>";
echo "<td>". $row['sum(menge)'] . "</td>";

echo "</tr>";

}
echo "</table>";


?>
 
Zurück