dedlfix: MySQL Order By & Limit

Beitrag lesen

echo $begrüßung;

Also ist das Problem welches ich habe effektiv nur mit einem Subquery möglich?

Die Reihenfolge der Klauseln eines SELECT-Statements geben im Wesentlichen die Abarbeitungsreihenfolge an. FROM (inklusive JOIN) ermittelt die zu verwendeden Tabellen. WHERE selektiert die zu berücksichtigenden Datensätze. GROUP BY und HAVING lass ich mal weg. Nun werden die Spalten nach dem SELECT ausgewertet und gegebenenfalls die dort angegebenen Berechnungen durchgeführt. Dann wird gemäß ORDER BY sortiert. Abschließend wird die Ergebnismenge LIMITiert.

Wenn du eine andere Abarbeitungsreihenfolge benötigst, so wie sich das in deiner Anfrage las, brauchst du einen Workaround. Erst limitieren und anschließend sortieren geht nicht direkt. Dazu muss zuerst das limitierte Zwischenergebnis ermittelt werden. Dieses muss aber alle Daten enthalten, die du für den nächsten Schritt benötigst. Zu wenig nützt dir nichts, zu viel ist Verschwendung, wenn die überschüssigen Daten ungenutzt bleiben.

mysql> SELECT inserate.id FROM inserate WHERE inserate.user LIKE '100' ORDER BY time DESC;
Wenn ich folgenden Query mache bringt er mir alle Inserate welche dem User 100 gehören sortiert nach Aufgabedatum absteigend. Dies funktioniert und ist schon mal toll.
Jedoch möchte ich nun NUR 20 anzeigen lassen und bin ich nun einfach zu doof um dieses Subquery zu verstehen??

Möchtest du von dem, was diese Abfrage in dieser Reihenfolge liefert die erstan 20 haben, also die 20 neuesten? Dann musst du nur daran ein LIMIT 20 anhängen. Dann wäre das aber genau deine Ausgangsabfrage, die ja angeblich nicht geht. Deiner Aussage auf meine Nachfrage zufolge wolltest du aber 20 beliebige Datensätze aus der unsortierten Menge und die dann sortieren. Ich denke, du solltest nochmal überlegen, was du nun genau willst. Vielleicht hilft es dir, dir vorzustellen, die Datensätze wären auf Papierkarteikarten. Was must du nun in welcher Reihenfolge tun, um an dein gewünschtes Ergebnis zu kommen?

echo "$verabschiedung $name";