Seite 1 von 1

SQL Abfrage Reihenfolge DESC aber neuestes unten

Verfasst: 01.06.2006 02:05
von mgutt
Wenn ich per sql-Abfrage per DESC sortiere ist das neueste oben und dann immer älter nach unten.. ich will also die 20 neuesten ergebnisse ausgeben lassen:
100.000
99.999
99.998
usw.
Dummerweise will ich es aber genau anders herum. Die Abfrage ist zwar schön schnell (ca. 0,3 Sekunden), aber die Reihenfolge nicht so wie ich sie gerne hätte.

Gehe ich dagegen hin und mache daraus ASC und setze das Limit auf 99979,20 dann braucht die Abfrage ewig (ca. 3-4 Sekunden), aber liefert mir die Reihenfolge, die ich gerne hätte:
usw.
99.998
99.999
100.000
Also wie schnell machen und gleichzeitig die gewünschte Reihenfolge erreichen? Weiterhin brauche ich für ASC zwei Abfragen. Die 1. klärt die Anzahl der Posts (wegen dem Limit) und die 2. ist erst für die Ausgabe der Daten zuständig. Damit kann ich zwar leben, aber mit einer wäre ich glücklicher :D

Verfasst: 01.06.2006 09:03
von Ivan
welchen Typ hat die Spalte??
Muss int sein...

Verfasst: 01.06.2006 12:40
von mgutt
Die Abfrage geht über drei Tabellen. Hier die Abfrage:

Code: Alles auswählen

$start_post = $chat_posts - 21;
$sql = "SELECT u.user_id, u.username, pt.post_text
	FROM " . POSTS_TABLE . " p, " . POSTS_TEXT_TABLE . " pt, " . USERS_TABLE . " u
	WHERE p.topic_id = 6311
		AND p.post_id = pt.post_id
		AND u.user_id = p.poster_id
	ORDER BY p.post_time ASC
	LIMIT $start_post,20";
if ( !($result = $db->sql_query($sql)) )
{
	message_die(GENERAL_ERROR, "Could not obtain information.", '', __LINE__, __FILE__, $sql);
}
post_time ist vom Typ int(11).

Gruß

Verfasst: 01.06.2006 13:16
von S2B
Ähm, warum machst du denn nicht den Rest mit PHP?

Code: Alles auswählen

for ($i = 20; $i > 0; $i--)
{

}

Verfasst: 01.06.2006 13:22
von mgutt
Schleife rückwärts.. was es alles gibt :D

Gleich mal ausprobieren. Danke!

EDIT:
Eigentlich fällt mir gerade ein, dass ich das Array auch einfach umdrehen könnte mit array_reverse() oder nicht?