Sorteren in MySQL - eerst A1 t/m A9, dan pas A10 t/m A99, dan A100+
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:
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
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
Waarschijnlijk heb je het veld "wegnummer" als varchar aangemaakt.
Als je dit omzet naar "int" zou het probleem volgens mij opgelost moeten zijn.
Als je dit omzet naar "int" zou het probleem volgens mij opgelost moeten zijn.
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
Werkt het ook gelijk met E en N nummer
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
Misschien is er toch een oplossing door ORDER BY toe te passen op een creatieve wijze?
Alvast bedankt weer
en als je de letters in een aparte kolom zet? (de A/N)
dan kan je het heel makkelijk sorteren
dan kan je het heel makkelijk sorteren
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!
De ANWB levert helaas niet zo aan, dus moet ik dat omzetten...
Hoopte dat het misschien makkelijker ging...
Toch bedankt!
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
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
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
dus hoe moet ik dit combineren??
Bedankt weer,
Stijn
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
Werkt het op onderstaande manier wel?
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!




