Seite 1 von 2

db-abrage sortieren

Verfasst: 08.04.2007 14:22
von leopittoni
Hallo

Ich habe eine Datenbank mit verschiedenen Tabellen.
Zwei der Datensätze sind "Name" und "Punkte".

Nun möchte ich die Datenbank abfragen, und die 5 "Namen" mit den meisten "Punkten" anzeigen lassen.

Wie kann ich das machen? Habe nicht viel Ahnung von mysql,...

Danke! Léo

Verfasst: 08.04.2007 16:29
von Xwitz

Code: Alles auswählen

"... ORDER BY Punkte ASC LIMIT 5"
ORDER BY - zum Sortieren nach Tabellenname Punkte
ASC - für umgekehrte Reihenfolge (absteigend)
LIMIT 5 - nur fünf Einträge

http://dev.mysql.com/doc/refman/5.1/de/select.html

Verfasst: 08.04.2007 16:40
von easygo
Xwitz hat geschrieben:ASC - für umgekehrte Reihenfolge (absteigend)
ASC = aufsteigend; DESC = absteigend / easy

Verfasst: 09.04.2007 13:15
von leopittoni
Hallo und schon mal danke für Eure Hilfe!

Habe es mal so versucht:

Code: Alles auswählen

<?php

$db = mysql_connect("localhost","dbminiadmin","passwort");
mysql_select_db("mini-shop");

$topminis = mysql_query("SELECT customers_firstname, customers_lastname, customers_shopping_points
FROM customers ORDER BY customers_shopping_points DESC LIMIT 5");
$row1 = mysql_fetch_row($topminis);
$fn1 = $row1[0];
$ln1 = $row1[1];
$sp1 = $row1[2];
$fn2 = $row1[3];
$ln2 = $row1[4];
$sp2 = $row1[5];

?>
<html>
<head>
<title>
Minis
</title>
<body>
<table border=1>
<tr>
<td>
<?php
echo($fn1);
?>
</td><td>
<?php
echo($ln1);
?>
</td><td>
<?php
echo($sp1);
?>
</td></tr><tr><td>
<?php
echo($fn2);

mysql_close($db);


?>
Ist wahrscheinlich viel zu umständlich gestaltet, aber wie könnte man das simpler machen? Es soll eine Tabelle geben mit in jeder Zeile 2 Spalten mit Vorname + Nachname und in der zweiten die Punkte (ohne Dezimalstellen wie jetzt...)

Für die erste Person funktioniert mein Script soweit, nur weiter gehts nicht...

Wer kann mir helfen?

Danke! Léo

Verfasst: 09.04.2007 14:05
von Jan500
hi

wie wäre es mit

Code: Alles auswählen

<html> 
<head> 
<title> 
Minis 
</title> 
<body> 
<table border="1">
<tr><th>Name, Vorname</th><th>Punkte</th></tr>

<?php 

$db = mysql_connect("localhost","dbminiadmin","passwort"); 
mysql_select_db("mini-shop"); 

$limit = 5;
$sql = "SELECT customers_firstname, customers_lastname, customers_shopping_points 
FROM customers ORDER BY customers_shopping_points DESC LIMIT $limit";

$topminis = mysql_query($sql); 

while ($row = mysql_fetch_array($topminis))
{
   echo '<tr>' . $row['customers_lastname'] . ', ' .$row['customers_firstname'] . '<td><td>' . $row['customers_shopping_points'] . '</td></tr>';
}

mysql_close($db); 

?>
</table>
</body>
</html>
?

Jan

Verfasst: 09.04.2007 14:14
von leopittoni
Hi

Hatte zwar einen kleinen Fehler mit den <td> in

Code: Alles auswählen

echo '<tr><td>' . $row['customers_firstname'] . ' ' .$row['customers_lastname'] . '</td><td>' . $row['customers_shopping_points'] . '</td></tr>';
so ists richtig.
Aber funktioniert prima! Vielen Dank!

Was bezweckt denn genau

Code: Alles auswählen

while ($row = mysql_fetch_array($topminis))
Das war mir noch nie klar...

Und noch: Ist es möglich, "customers_shopping_points" ohne Dezimalstellen auszugeben? Oder einfach die 3 hintersten Zeichen zu entfernen. (momentan ists zB. 92.00, angezeigt werden müsste aber nur 92

Vielen Dank! Léo

Verfasst: 09.04.2007 14:25
von Jan500
h
ja, sry hatte die tabele etwas schnell hingeschrieben ^^

damit du gane zahlen bekommst schreib

Code: Alles auswählen

intval($row['customers_shopping_points'])
while ist eine schleife und wirdsolane wiederholt bis die bedingung FALSE wird (also bis keine ergebnissemehr vom query geiefert werden)

http://www.php.net/manual/de/control-st ... .while.php

Jan

Verfasst: 09.04.2007 14:30
von leopittoni
Danke!

Wo muss dass genau hin? So funktionierts nicht: es ändert nichts...

Code: Alles auswählen

echo '<tr><td>' . $row['customers_firstname'] . ' ' .$row['customers_lastname'] . '</td><td>' . intval($row['customers_shopping_points']) . '</td></tr>';

Verfasst: 09.04.2007 14:53
von Jan500
uinwas für einem typ sind die punkte gespeichert? als string?

soll das 92,00 sein? oder als "text" 92.00

wenn die letzte drei zeichen immer abgeschnitten werden oslln kannst du auch statt

Code: Alles auswählen

intval($row['customers_shopping_points'])
das

Code: Alles auswählen

substr($row['customers_shopping_points'], 0, -3) 
schreiben


Jan

Verfasst: 09.04.2007 15:08
von leopittoni
Ok, danke! funktioniert!

Noch eine mySQL-Frage...

Ich habe in der Tabelle "customers" einen Eintrag "einsatz" mit versch. Daten.

Nun müsste ich das Aktuelle Datum erfassen, und alle "customers_names" anzeigen, die ein Datum in "einsatz" haben, welches diese Woche ist.

Ist das möglich? Wie müsste ich die Daten in "einsatz" eingeben/formatieren?
Und wie müsste ich das Datum checken und dann überprüfen, wer in der aktuellen Woche ein Datum eingetragen hat?

Danke! Léo