echo $begrüßung;
Das vehemente Ablehnen von "SELECT *" und das MySQL-Bashing beim Selektieren nicht gruppierter Spalten ist in meinen Augen ein überflüssiger Volkssport. Beide Themen haben nicht nur Nachteile und oft sind sie nicht so gravierend, wie sie niedergemacht werden. Mäßigung und sachliche Aufklärung hilft in meinen Augen mehr als große Buchstaben und das ständige unbegründete Wiederholen.
Einige Argumente sind uralt und nicht mehr wirklich zutreffend.
Es stimmt immer noch, dass das Abfragen nicht benötigter Spalten überflüssig ist. Besonders bei großen Spaltentypen wie BLOB sollte man nicht ohne Grund selektieren. Ansonsten stammt das Argument aus Zeiten, in denen die Performance der Rechentechnik um Größenordnungen geringer als heute und jedes Einsparen deutlicher spürbar war. Bei überschaubarer Datenmenge fällt der zusätzliche Aufwand nicht so sehr ins Gewicht. Allerdings kommt jede eingesparte Rechenleistung dem Verbrauch zu Gute, so dass man dieses Argument nun wohl eher aus Umweltgründen bringen könnte ...
Das nächste Argument ist, dass "die Reihenfolge der Spalten bei der Ausgabe sonst undefiniert ist". Ja, aber wen interessiert das, wenn man sowieso über den Namen der Spalten auf selbige zugreift (*_fetch_assoc())?
Dass "die Spalten sonst möglicherweise keinen vernünftigen oder eindeutigen Namen haben" ist einerseits (vernünftiger Name) nur dann interessant, wenn man den Namen als Objekteigenschaftsnamen benötigt, andererseits (Eindeutigkeit) nur dann relevant, wenn man mehrere Tabellen in der Abfrage hat und sich dabei mehrere gleichnamige Spalten ergeben. Funktionen und berechnete Spalten lassen sich ja schließlich nicht mittels * notieren, so dass man bei deren Verwenden ohne Weiteres die Möglichkeit hat, einen Aliasnamen anzufügen.
Dann zitiert der Beitrag zum Zwecke der Begründung des allgemeinen Missbilligens das MySQL-Handbuch, das aber in dem Zitat nur von einem speziellen Fall spricht, nämlich dem Abfragen der Ergebnisse anhand der Position der Spalten, aber das macht nach meinen Beobachtungen (der hiesigen Datenbankfragen) so gut wie keiner. Die Seite, auf der es steht handelt vom Umsortieren von Spalten in einer Tabelle und der Satz ist mittlerweile deutlich harmloser geworden: "... you should never rely on using SELECT * and retrieving the columns based on their position." also "never rely" (nicht drauf verlassen) statt "never use" (nicht verwenden).
Beim Insert die Spalten anzugeben ist hingegen unbestritten sinnvoll, jedenfalls bei der Variante
INSERT INTO tabelle (spaltennamen) VALUES (werte)
denn hier greift man, lässt man die Spaltennamen weg, über die Position zu, was beim Spaltenlayoutändern Probleme nach sich ziehen kann.
Vorsintflutliche MySQL-Versionen (welche nutzt Du?) leiden leider unter akuter Microsoftitis Browseriensis ... sie sind bei Fehler viel zu nachgiebig, raten herum [...]
nicht nur vorsintflutliche - MySQL betrachtet die GROUP-BY-Funktionalität als ein besonderes Komfortfeature: GROUP BY hidden fields
Das ist zugegeben ein problematisches Feature, aber ein dokumentiertes. Dass Dokumentation ungern gelesen wird und mit MySQL als erstem DBMS "Aufgewachsene" die Problematik erst bei unerwarteten Ergebnissen bemerken, kreide ich nicht MySQL an. Auch bei mir musste seinerzeit erst ein Oracle (nebst Admin) kommen, um mich zum Nachdenken darüber anzuregen.
Um an die restlichen Daten von per Gruppierung ermittelten Datensätzen zu gelangen muss man das Gruppierungsergebnis wieder mit der gleichen Tabelle verknüpfen. Diesen Aufwand kann man sich und dem DBMS bei Eindeutigkeit sparen. Das Ergebnis wird dadurch nicht besser. Wenn nach der Gruppierung das Ergebnis mehrdeutig ist, ändert auch das Nichtzulassen der Abfrage wenig an dem Zustand. Einfach weitere Spalten beim Gruppieren anzugeben ist auch nicht die Antwort, beeinflusst das doch die Aggregatfunktionsergebnisse. Gelöst werden kann dieser Fall sicher nur auf anderem Wege und einzelfallabhängig.
Vielleicht wäre es besser gewesen, das Feature ONLY_FULL_GROUP_BY entgegengesetzt implementiert zu haben, so dass das Selektieren nur auf ausdrücklichen Wunsch möglich wird.
echo "$verabschiedung $name";