31. marts 2005 - 08:35Der er
22 kommentarer og 1 løsning
Sortering af dato, "tomme" datoer skal komme sidst
Ja, faktisk ved jeg ikke om spørgsmålet skulle have været i MySQL-kategorien, hvis det kan klares via select-sætningen, må I sige til, så jeg kan oprette spg. det rette sted. Men jeg vil mene, at det er her, der er størst mulighed for at få hjælp til en løsning.
Jeg har en select-sætning, der henter nogle ordreoplysninger ud bl.a. diverse datoer, disse sortere jeg stigende, og der kommer de tomme datoer jo selvfølgelig først. Problemet er at brugerne af systemet, vil have ordrene, som ikke har en dato endnu, til at komme sidst i søgning, men samtidig skal den førstkommende dato jo komme først.
Kan det løses via php og hvordan, eventuelt i SQL, men som jeg skrev, så skal jeg nok flyttet spørgsmålet, hvis det er aktuelt.
<?php //optegn ugenr og dags nr $optegn = $foo['optegnuge']."-".$foo['optegndag']; if (!isset($foo['optegnuge'])) { $foo['optegnuge'] = ""; $optegn = ""; }?> <td class="content" valign="top" style="text-align: right";><?php echo $optegn;?></td>
. . .//Forsætte med at skrive de forskellige værdier ud .
Men kan det ikke skyldes, at jeg med det "tomme" mente datoerne 0000-00-00, de kommer jo stadigvæk først, og hvis jeg som her har tilføjet 0000-00-00 i if-sætningen, så får jeg en masse tomme rækker før selve indholdet kommer.
Men det kan være sorteringen bliver mere indviklet, for som standard skal der først sorteres på dato (r531b) derefter id. Derudover kan brugeren klikke på nogle kolonneoverskrifter og så ordrene sorteret efter disse.
De ekstra sorteringer vil så se sådanne ud. 1) id, r531b, id 2) r531b, r531b, id //som også er standard 3) r533c, r531b, id 4) r1, r531b, id
Og ja, der er noget dobbeltkonfekt i 1 og 2, men sådan ser det altså ud pt, og det virker bort set fra problemet med datoerne.
SELECT o5.r531b, o.id AS id, o.ordre AS ordre, o.rev AS rev, o0.r9 AS kunde, o0.r1 AS projektleder, WEEKOFYEAR(o5.r533c) AS levuge, WEEKDAY(r533c)+1 AS levdag, o5.r541, WEEKOFYEAR(o5.r540a) AS staaluge, WEEKDAY(o5.r540a)+1 AS staaldag, WEEKDAY(o5.r542a)+1 AS stadag, WEEKOFYEAR(o5.r542a) AS stauge, WEEKOFYEAR(o5.r543a) AS teguge, WEEKDAY(o5.r543a)+1 AS tegdag, o5.r537, o5.r538, WEEKOFYEAR(o5.r547a) AS sendtuge, WEEKDAY(o5.r547a)+1 AS sendtdag, WEEKOFYEAR(o5.r545a) AS godkuge, WEEKDAY(o5.r545a)+1 AS godkdag, o5.r570, WEEKOFYEAR(o5.r531b) AS optegnuge, WEEKDAY(o5.r531b)+1 AS optegndag FROM ordre AS o, ordre0 AS o0 LEFT JOIN ordre5 AS o5 ON o0.tilbudsnummer = o5.tilbudsnummer WHERE o0.tilbudsnummer = o.id && ( o5.r534 =0 || o5.r534 IS NULL ) && o5.r534a !=1 && ( o5.r534b !=1 || o5.r534b IS NULL ) ORDER BY $sort, o.id ASC
$sort er så den der blvier udskiftet alt efter hvilken sortering der skal bruges.
Okay, de ekstra tomme, der pludselig kom, kan skyldes at der var [] på $tomme. Jeg har i hvert fald fjernet dem, og så forsvinder de tomme række i outputtet.
Hov, de tomme rækker jeg omtaler, skal faktisk være der, men jeg får overhovedet ingen oplysninger ud om dem, og de skal stadig vise, alle tilgængelige info.
Jeg kan desværre ikke vise outputtet, da opsætningen simpelthen er for stor til E.
<?php //optegn ugenr og dags nr $optegn = $foo['optegnuge']."-".$foo['optegndag']; if (!isset($foo['optegnuge'])) { $foo['optegnuge'] = ""; $optegn = ""; }?> <td class="content" valign="top" style="text-align: right";><?php echo $optegn;?></td> . . .//Forsætte med at skrive de forskellige værdier ud .
Nej desværre. Den viser ordrene med tomme datoer korrekt un, men tilgengæld vises alle de andre ordre ikke. Derudover vises der en masse række indeholdende data, som jeg ikke lige nu kan genkende, måske ordre med datoer, som ikke bliver vidst korrekt. Til sidst er der stadig en masse helt tomme rækker.
Har du rettet til: if("" == $foo["r531b"] || "0000-00-00" == $foo["r531b"]) { $tomme[] = $foo; } else { $med_dato[] = $foo; } Både $tomme og $med_dato skal have [] på !!!!
Ja, sostack, jeg må have fået gjort et eller andet helt vildt dumt, for nu virker det ikke alligevel. Jeg har derfor oprettet et nyt spørgsmål, som du eventuelt kan svare på og tjene flere point ;-) http://www.eksperten.dk/spm/613681
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.