Sorteren in MySQL - eerst A1 t/m A9, dan pas A10 t/m A99, dan A100+

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Top Low-Code Developer Gezocht!

Bedrijfsomschrijving Unieke Kansen, Uitstekende Arbeidsvoorwaarden & Inspirerend Team Wij zijn een toonaangevende, internationale organisatie die de toekomst van technologie vormgeeft door het creëren van innovatieve en baanbrekende oplossingen. Ons succes is gebaseerd op een hecht en gepassioneerd team van professionals die altijd streven naar het overtreffen van verwachtingen. Als jij deel wilt uitmaken van een dynamische, vooruitstrevende en inspirerende werkomgeving, dan is dit de perfecte kans voor jou! Functieomschrijving Als Low-Code Developer ben je een cruciaal onderdeel van ons team. Je werkt samen met collega's uit verschillende disciplines om geavanceerde applicaties te ontwikkelen en te optimaliseren met behulp van Low-code

Bekijk vacature »

Stijn V

Stijn V

01/07/2009 10:21:00
Quote Anchor link
HI,

Voor een file site van me sorteer ik op wegnummer.

Het gaat nu als volgt:
Stel er zijn meldingen op de A1, A4, A2, A12, A261 dan wordt er bij mij gesorteerd op de volgende wijze.

A1
A12
A2
A261
A4

Om het wat netter en logischer te maken zou ik graag willen sorteren op de volgende manier:
A1
A2
A4
A12
A261

Mijn huidige SQL script ziet er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?
$q
= "

    SELECT

        *,  DATE_FORMAT(datumtijd, '%H:%i') AS tijd

    FROM

        filemeldingen

    WHERE

        status = '1'

    ORDER BY

        wegnummer ASC

"
;
?>


Ik heb vanalles geprobeerd maar krijg het niet voor elkaar...

Eigenlijk gaat het dus om het volgende:
sort first A[0-9]
then A[10-99]
then A[100-999]


Wie kan mij op weg helpen?

Thanks
Stijn
 
PHP hulp

PHP hulp

28/03/2024 21:53:22
 
Davy Jansen

Davy Jansen

01/07/2009 10:56:00
Quote Anchor link
Waarschijnlijk heb je het veld "wegnummer" als varchar aangemaakt.
Als je dit omzet naar "int" zou het probleem volgens mij opgelost moeten zijn.
 
Jacco Engel

Jacco Engel

01/07/2009 10:59:00
Quote Anchor link
ja alleen wel jammer dat een A geen cijfer is. Als je dat split zou het probleem wel opgelost moeten zijn.

Werkt het ook gelijk met E en N nummer
 
Stijn V

Stijn V

01/07/2009 11:05:00
Quote Anchor link
THanks voor de input. Ik heb inderdaad de A ook in de database staan, omdat er in dezelfde kolom ook N wegen voorkomen. helaas kan ik het dus niet omzetten naar een int...

Misschien is er toch een oplossing door ORDER BY toe te passen op een creatieve wijze?

Alvast bedankt weer
 
Tamara

Tamara

01/07/2009 11:12:00
Quote Anchor link
en als je de letters in een aparte kolom zet? (de A/N)

dan kan je het heel makkelijk sorteren
 
Stijn V

Stijn V

01/07/2009 11:27:00
Quote Anchor link
Ik moet er dan toch maar aan geloven om inderdaad de structuur te veranderen dat ik de A/N in een aparte kolom zet...

De ANWB levert helaas niet zo aan, dus moet ik dat omzetten...

Hoopte dat het misschien makkelijker ging...

Toch bedankt!
 
Jeroen Jansen

Jeroen Jansen

01/07/2009 11:39:00
Quote Anchor link
Stijn,

met deze sql moet het volgens mij ook lukken.

select wegnummer,
left(wegnummer, 1) as letter,
cast(right(wegnummer, length(wegnummer)-1) as signed) as getal
from filemelding
order by letter, getal
Gewijzigd op 01/01/1970 01:00:00 door Jeroen Jansen
 
Stijn V

Stijn V

01/07/2009 14:17:00
Quote Anchor link
Bedankt Jeroen, je hebt me op weg geholpen, want het werkt inderdaad als ik alleen jouw stukje ode er neerzet!

Alleen nu moet ik nog de andere data ophalen uit de db en dat lukt nu weer niet... Ik krijg alleen de wegnummers te zien...

Deze twee heb ik geprobeerd maar dat geeft een foutmelding.
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'left(wegnummer, 1) as letter, cast(right(wegnummer, length(wegnummer)-1) as signed) as getal or' at line 18

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?
$q
= "


    SELECT

        *,

        DATE_FORMAT(datumtijd, '%H:%i') AS tijd

    FROM

        filemeldingen

    WHERE

        DATE_ADD(datumtijd, INTERVAL "
.TTL." HOUR) > NOW()

    AND
        status = '1'

    left(wegnummer, 1) as letter,
    cast(right(wegnummer, length(wegnummer)-1) as signed) as getal
    order by letter, getal

"
; ?>


Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?
$q
= "


    SELECT

        *,

        DATE_FORMAT(datumtijd, '%H:%i') AS tijd

    FROM

        filemeldingen

    WHERE

        DATE_ADD(datumtijd, INTERVAL "
.TTL." HOUR) > NOW()

    AND
        status = '1'

    select wegnummer,
    left(wegnummer, 1) as letter,
    cast(right(wegnummer, length(wegnummer)-1) as signed) as getal
    from filemelding
    order by letter, getal

"
; ?>



dus hoe moet ik dit combineren??

Bedankt weer,

Stijn
 
Midas

Midas

01/07/2009 14:32:00
Quote Anchor link
Werkt het op onderstaande manier wel?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
SELECT
  veld1,
  veld2,
  veld3,
  wegnummer,
  LEFT(wegnummer, 1) AS letter,
  CAST(RIGHT(wegnummer, LENGTH(wegnummer)-1) AS signed) AS getal
  DATE_FORMAT(datumtijd, '%H:%i') AS tijd
FROM
  filemeldingen
WHERE
  DATE_ADD(datumtijd, INTERVAL ".TTL." HOUR) > NOW()
AND
  status = 1
ORDER BY
  letter, getal
[/code]
 
Stijn V

Stijn V

01/07/2009 14:34:00
Quote Anchor link
Thanks Midas, ga het proberen!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.