dedlfix: Klausel-Reihenfolge

Beitrag lesen

echo $begrüßung;

  1. Lass einmal LIMIT aussen vor :-)
       Das kommt später

Kann das bei einem JOIN eventuell Probleme machen, und wenn ja, wie kann ich das gewünschte dann erreichen?

Wenn ich richtig vermute, spielt Vinzenz auch auf die Art an, wie die Klauseln in SQL-Befehlen im allgemeinen abgearbeitet werden. [1] In der Reihenfolge wie sie notiert werden müssen [2],

SELECT ... FROM ... WHERE ... GROUP BY ... HAVING ... ORDER BY ... LIMIT ...

so werden sie auch auf die Datenmenge angewendet. [3]

Mit FROM weiß die DB welche Tabellen verwendet werden sollen. [4]
Mit WHERE werden die Ergebnisdaten eingeschränkt.
Mit GROUP BY werden diese Daten zwecks Berechnung von z.B. statistischen Werten zusammengefasst.
Mit HAVING werden weitere Einschränkungen dieser gruppierten und berechneten Daten vorgenommen.
ORDER BY sortiert das Ergebnis.
und LIMIT schränkt nochmal die Anzahl der Datensätze anhand ihrer jetzigen Position ein.

Beispiel gefällig?

SELECT LEFT(name,1) AS firstletter,COUNT(*) AS quantity
FROM users
WHERE NOT role='admin'
GROUP BY firstletter
HAVING quantity>1
ORDER BY firstletter
LIMIT 10,5   [5]

Von den users werden alle normal Sterblichen (ungleich admin) verwendet. Diese werden anhand ihrer Anfangsbuchstaben/-zeichen zusammengefasst und gezählt. Ins Ergebnis kommen aber nur die Anfangsbuchstaben, die mehr als 1x vertreten sind. Vom sortierten Ergebnis werden aber nur 5 Datensätze ab Position 10 zurückgegeben.

echo "$verabschiedung $name";

[1] Du scheinst noch nicht allzuviel über SQL zu wissen. Ich denke, dass die folgende Erläuterung da sicher nicht schaden wird.

[2] natürlich müssen nicht immer alle Klauseln angegeben werden, aber wenn, dann nur so.

[3] Dazu habe ich leider nicht gefunden, ob/wo das in der MySQL-Doku erklärt ist. Ich hoffe, meine (Ein)bildung stimmt. Wenn nicht, bitte korrigieren oder eine Dokumentation verlinken. Danke.

[4] JOINs gehören zum FROM und sind deshalb nicht extra erwähnt.

[5] "Don't try this at home, kids." :-) Nicht in allen Klauseln ist die Verwendung der unter SELECT definierten Aliasse (AS ...) erlaubt. Ich fügte sie der besseren Lesbarkeit wegen trotzdem ein.