Sorteren in MySQL - eerst A1 t/m A9, dan pas A10 t/m A99, dan A100+
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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
";
?>
$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
Als je dit omzet naar "int" zou het probleem volgens mij opgelost moeten zijn.
Werkt het ook gelijk met E en N nummer
Misschien is er toch een oplossing door ORDER BY toe te passen op een creatieve wijze?
Alvast bedankt weer
dan kan je het heel makkelijk sorteren
De ANWB levert helaas niet zo aan, dus moet ik dat omzetten...
Hoopte dat het misschien makkelijker ging...
Toch bedankt!
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
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)
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
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
"; ?>
$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)
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
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
"; ?>
$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
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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]
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]
Thanks Midas, ga het proberen!