Hallo!
Hier mal die Tabelle.
mysql> select * from sorttest;
+----+------+
| id | zahl |
+----+------+
| 1 | 0 |
| 2 | 0 |
| 3 | 1 |
| 4 | 2 |
| 5 | 5 |
| 6 | 7 |
| 7 | 9 |
| 8 | 10 |
+----+------+
probier mal
select irgend,welche,felder,(length(sortfeld)=0) NOTNULLTEST from tabelle order by NOTNULLTEST,sortfeld;
Dein SQL gibt folgendes aus:
mysql> select id, (length(zahl)=0) NOTNULLTEST from sorttest order by NOTNULLTEST,zahl;
+----+-------------+
| id | NOTNULLTEST |
+----+-------------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | 0 |
| 5 | 0 |
| 6 | 0 |
| 7 | 0 |
| 8 | 0 |
+----+-------------+
Ist wahrscheinlich nicht das Performancewunder, aber besser als zwei Queries wirds schon sein.
Ich hatte die Tabelle in einem Zug geholt und dann die Arrays zusemmen gesetzt.:
z.B.
$a1 = 0;
$a2 = 0;
$array1 = array();
$array2 = array();
while()
{
if(is_null($erg["zahl"])) { $array1[$a1] = $erg["id"]; $a1++; }
else { $array2[$a2] = $erg["id"]; $a2++; }
}
--> Dann noch Array verbinden!
Ich habe es mal so gelöst:
SELECT id, IF(zahl, zahl, 1000) AS sortzahl FROM sorttest ORDER BY sortzahl ASC;
+----+----------+
| id | sortzahl |
+----+----------+
| 3 | 1 |
| 4 | 2 |
| 5 | 5 |
| 6 | 7 |
| 7 | 9 |
| 8 | 10 |
| 1 | 1000 |
| 2 | 1000 |
+----+----------+
Die 1000 wird nie erreicht. Die sortzahl soll eine Art Rangsystem ein. Die 1 ist das erste usw. Bei einem Neueintrag hat man diesen Rang noch nicht vergeben, und dann kommt NULL in die Zeile. Ok, ich könnte das schon mit 'DEFAULT 1000' angeben, aber dies finde ich nicht so toll.
WAs mir aber so gerade einfällt, man könnte die höchste Zahl von 'zahl' holen um +1 erhöhen und dann spart man sich auch ein haufen "Arbeit".
Das ganze ist für ein Bilder-CMS gedacht. Ein oder zwei SQL-Statements sind nicht so schlimm.
MfG, André Laugks