Hallo Frank!
1.) Freut mich, dass es klappt - hab ja gesagt, wir schaffen das ;-)
2.) Union als solches ist bei Datenbankentwicklern eigentlich verpönt - es gibt auch nur wenige Anwendungsfälle, die ein Union erforderlich machen - aber ich denke, dein Beispiel kommt da ganz gut hin.
3.) Natürlich kannst Du das weiter ausbauen - du musst für den "Rest" dann halt auch die "not like" erweitern. Union ist auch nicht besonders ("like" eben so wenig) performant - wenns also mehr Daten sind, kanns sein, das es etwas dauert.
4.)Das Beispiel hätt ich fast übersehen...
$array_vorsort=array("M","S","E","G");
$vorsort = '';
/* Alle Selects ... */
for($x=0;$x<count($array_vorsort);$x++)
{
$vorsort .= "select '".$x."' as SortField, lname, fname from members where lname like '".$array_vorsort[$x]."%' union ";
}
/* ... und jetzt noch den Rest */
$vorsort .= "select concat('9', lname), lname, fname from members where ";
for($x=0;$x<count($array_vorsort);$x++)
{
$vorsort .= "lname not like '".$array_vorsort[$x]."%' and ";
}
/* und damit unser select nicht mit and; endet, einfach noch einen Dummy anhängen */
$vorsort .= "1 = 1";
So ungefähr - den Rest solltest Du hinbekommen - viel Spaß noch,
mfg
norbert =:-)