Hallo, ich nochmal.
die Lösung von dedlfix war leider nur auf den ersten Blick ok. UNION verbietet die ORDER BY in den SELECT's, die vereinigt werden sollen. Ein:
(
SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 0
ORDER BY termin ASC
)
UNION
(
SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 1
ORDER BY termin DESC
)
ist witzlos, da MySQL das ORDER BY automatisch herausoperiert (es sei denn, es wird in Verbindung mit einem LIMIT innerhalb der SELECT's verwendet).
Gültig wäre:
(
SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 0
)
UNION
(
SELECT termin, auftrErledigt
FROM `table`
WHERE auftrErledigt = 1
)
ORDER BY termin ASC
Damit sind wir aber wieder beim Ausgangsproblem, dass termin
"global" sortiert wird.
Mit PHP ist die Lösung völlig einfach und problemlos:
public function fetchAssocMulti ( $sqlString = '' ) {
$data = array();
$row = $db->query($sqlString);
while( $anfrage = $row->fetch_assoc() ) {
$data[] = $anfrage;
}
if ( !$row ) {
exit($row->error);
} else {
return $data;
}
} //end function
$sqlString_1 = SELECT * FROM `table` WHERE auftrErledigt = 0 ORDER BY termin ASC;
$sqlString_2 = SELECT * FROM `table` WHERE auftrErledigt = 1 ORDER BY termin DESC;
$data_1 = $this->fetchAssocMulti($sql_string_1);
$data_2 = $this->fetchAssocMulti($sql_string_2);
§data = array_merge($data1, $data2)
Fertig! Klappt wunderbar. Wobei ich nicht ausschließen will, dass das auch direkt per sql funktioniert, nur habe ich keine Zeit lange danach zu suchen. Werde ich sicher nochmal aufnehmen, wenn ich nicht so viel um die Ohren habe.
Danke nochmal an Alle, die mir Tipps gegeben haben.
Herzliche Grüße
Christoph