SQL Die letzten 10 Datensätze auslesen

raven16

Lieutenant
Registriert
Nov. 2008
Beiträge
580
Hi,

ich möchte gerne bei egal wie vielen Datensätzen immer nur die 10 neusten Einträge aus der Datenbank auslesen.

Kann mir da mal einer weiterhelfen?

Als Spalten in der Datenbank habe ich probid(ID der jeweiligen Zeile),probdate(Datum erzeugt durch die PHP-Funktion time()<-Unix-Timestamp)

Dadurch, dass ab und zu wesentliche Inhalte des Datensatzes gelöscht werden (außer probid und probdate), muss auch noch eine Zusatzkriterie eingefügt werden:
Wenn probview='0' , dann soll die Tabellenzeile übersprungen werden und nicht zu den letzten 10 Datensätzen gehören.

Danke schon mal im Vorraus
 
muppler schrieb:
TOP ist der Ausdruck den du suchst -> siehe hier

Code:
QL-Befehl: Dokumentation

SELECT TOP( 10 )
FROM probleme
WHERE verstossview = '1'

MySQL meldet: Dokumentation
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '( 10 ) FROM probleme WHERE verstossview = '1' ' at line 1

vllt. muss ich noch erwähnen, das ich php+mysql verwende, da gibt es den Ausdruck top nicht... ich muss das dort mit LIMIT erreichen
ich denke das ich dann den letzten Datensatz herrausfinden muss, den dann -10 rechne und dann am schluss mit LIMIT anfang und ende festlege
 
Zuletzt bearbeitet:
also wenn ich das richtig verstehe, soltle folgendes helfen
SELECT * FROM probleme ORDER BY probdate DESC LIMIT 10
 
Hab schon mal nen ersten Lösungsansatz formuliert:

PHP:
$sql_count_probview = mysql_query("SELECT count( probid ) AS beitragsende
							FROM probleme
							WHERE probview = '1'") or die(mysql_error()." ->Abfrage <b>sql_count_probview</b> klappt nicht.");
if(mysql_num_rows($sql_count_probview) != 0)
{
	$obj_count_probview = mysql_fetch_object($sql_count_probview);
	$ende = $obj_count_probview->beitragsende;
	$anfang = $ende - 10;
											
	$sql_get_new_beitraege = mysql_query("SELECT probtitel,probtext,probtype,probdate,probname,probage,probgender FROM probleme
									WHERE probview='0'
									LIMIT ".$anfang.",".$ende."") or die(mysql_error()." ->Abfrage <b>sql_get_new_beitraege</b> klappt nicht.");
	while($obj_get_new_beitraege = mysql_fetch_object($sql_get_new_beitraege))
	{
		echo'Ausgabe:'.$obj_get_new_beitraege->probtitel;
	}
}

Bei der Abfrage $sql_get_new_beitraege hab ich aber noch den Fehler:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-10,0' at line 3
 
Sieht ja wohl so aus als wenn dort "LIMIT -10,0" rauskommen würde. Wieso hast Du Minus 10 Ergebnisse?

Weil da steht:

PHP:
$anfang = $ende - 10

$anfang = 0
$ende = 0

also ist anfang = -10

ergo ein mysql Fehler.
 
Zuletzt bearbeitet:
Ja das hab ich auch schon erkannt :)

Aber wie kann ich das umgehen, das wenn ich weniger als 10 einträge habe, die subtraktion -10 je nach eintrag bis nach -0 reduziert wird?
 
Ich verstehe die Frage nicht: Durch die Sortierung und Anfragen WHERE und ORDER BY hast Du doch schonmal die gewünschten Ergebnisse.

Wenn Du dann noch LIMIT 0,10 dahinterhängst startet wer bei den Ergebnissen - die vorher mit ORDER BY sortiert wurden - und rasselt die von 0 bis max. 10 durch. LIMIT 0,10 heisst maximal 10 Einträge, es werden nicht zwingend ausgegeben.
 
Hab die Abfrage nun geändert:
PHP:
$sql_get_new_beitraege = mysql_query("SELECT probtitel,probtext,probtype,probdate,probname,probage,probgender FROM probleme
								WHERE probview='1'
								AND probanswername IS NOT NULL
								ORDER BY probid DESC
								LIMIT 10") or die(mysql_error()." ->Abfrage <b>sql_get_new_beitraege</b> klappt nicht.");

Klappt auch so

danke für die Tipps
 
Sorry, wenn ich nochmal nachfrage. Es ist zwar machbar den SqlBefehl so zu gestalten das nur die ersten 10 Zeilen kommen. Aber wie ich sehe, fetchst du dich eh auf PHP Seite mit einer Schleife durch das Resultset. Was wäre dann so falsch daran gewesen, einfach nach dem 10 Datensatz aus der Schleife auszusteigen? Klar ist da ein Overhead seitens der DB, weil die ja das volle Resultset bilden muss, was sie auch unabhängig von dem LIMIT oder TOP machen wird, da die Sortierung entscheidet, welcher Datensatz nun on top ist. Gibt es da von Seiten PHP Probleme, wenn man nicht das gesamte Resultset fetcht?
 

Ähnliche Themen

Zurück
Oben