alphanumeric order by vanuit phpmyadmin
Hallo,
is er iemand die me kan helpen bij het sorteren van gegevens uit de database waarbij er getallen in de omschrijving staan die ik in de while graag alphanumeric wil tonen op het scherm.
Kan dit al in de SELECT mbv Order by of moet ik in een later stadium doen?
Met de gewone order by zet hij 11 boven de 8. Dus iPhone 8 of iPhone 11 in de omschrijving.
Groet,
Vincent
is er iemand die me kan helpen bij het sorteren van gegevens uit de database waarbij er getallen in de omschrijving staan die ik in de while graag alphanumeric wil tonen op het scherm.
Kan dit al in de SELECT mbv Order by of moet ik in een later stadium doen?
Met de gewone order by zet hij 11 boven de 8. Dus iPhone 8 of iPhone 11 in de omschrijving.
Groet,
Vincent
Of maak een apart veld met het versienummer.
Beide aangedragen opties waren niet het gewenste antwoord.
Inmiddels heb ik na heel wat speurwerk de oplossing gevonden en doet volledig aan mijn vraag en wensen...
Inmiddels heb ik na heel wat speurwerk de oplossing gevonden en doet volledig aan mijn vraag en wensen...
Code (php)
1
ORDER BY CAST(CASE WHEN modelnaam LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9][0-9]' THEN RIGHT(modelnaam ,7) WHEN modelnaam LIKE '%[0-9][0-9][0-9][0-9][0-9][0-9]' THEN RIGHT(modelnaam ,6) WHEN modelnaam LIKE '%[0-9][0-9][0-9][0-9][0-9]' THEN RIGHT(modelnaam ,5) WHEN modelnaam LIKE '%[0-9][0-9][0-9][0-9]' THEN RIGHT(modelnaam ,4) WHEN modelnaam LIKE '%[0-9][0-9][0-9]' THEN RIGHT(modelnaam ,3) WHEN modelnaam LIKE '%[0-9][0-9]' THEN RIGHT(modelnaam ,2) WHEN modelnaam LIKE '%[0-9]' THEN RIGHT(modelnaam ,1) ELSE NULL END AS INT)
Wat werkte er niet aan de aangedragen mogelijkheden?
Omdat een iPhone meerdere modellen heeft in dezelfde serie.
Dus iPhone 13, iPhone 13 Pro en iPhone 13 Pro Max.
Dus het is niet te doen om het getal in een aparte kolom te plaatsen om het dan in de db toe te voegen of eruit te filteren.
De andere optie kijkt enkel naar het getal en voldoet dus niet aan de totale volgorde in de gehele naam van het model.
Ik ben blij dat ik de oplossing toch heb gevonden.
Dus iPhone 13, iPhone 13 Pro en iPhone 13 Pro Max.
Dus het is niet te doen om het getal in een aparte kolom te plaatsen om het dan in de db toe te voegen of eruit te filteren.
De andere optie kijkt enkel naar het getal en voldoet dus niet aan de totale volgorde in de gehele naam van het model.
Ik ben blij dat ik de oplossing toch heb gevonden.
Adoptive Solution op 04/03/2024 14:06:01:
Ohw, das dan misschien toch een betere optie. Ik kreeg het zo niet voor elkaar.
Dan ga ik er nog eens even beter naar kijken.
Dank voor het voorbeeld.
misschien leuk om de query hier even te plaatsen?
Ik merk dat mijn optie ook niet optimaal werkt en wil toch die andere opties eens uitproberen.
Op internet is er veel discussie over hoe dit aan te pakken en waarom het niet als standaard is ingesteld in php en in mysql.
Dus ik zou graag dit onderwerp wat uitgebreider willen zien. Wat moet ik bijvoorbeeld instellen in de database en wat in de select ?
Op internet is er veel discussie over hoe dit aan te pakken en waarom het niet als standaard is ingesteld in php en in mysql.
Dus ik zou graag dit onderwerp wat uitgebreider willen zien. Wat moet ik bijvoorbeeld instellen in de database en wat in de select ?
met voorbeelden op https://mariadb.com/kb/en/natural_sort_key/
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
INSERT INTO t1 VALUES
('5.5.31'),('10.7.0'),('10.2.3'),
('10.1.22'),('10.3.32'),('10.2.12');
SELECT c FROM t1 ORDER BY c;
+---------+
| c |
+---------+
| 10.1.22 |
| 10.2.12 |
| 10.2.3 |
| 10.3.32 |
| 10.7.0 |
| 5.5.31 |
+---------+
SELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);
+---------+
| c |
+---------+
| 5.5.31 |
| 10.1.22 |
| 10.2.3 |
| 10.2.12 |
| 10.3.32 |
| 10.7.0 |
+---------+
('5.5.31'),('10.7.0'),('10.2.3'),
('10.1.22'),('10.3.32'),('10.2.12');
SELECT c FROM t1 ORDER BY c;
+---------+
| c |
+---------+
| 10.1.22 |
| 10.2.12 |
| 10.2.3 |
| 10.3.32 |
| 10.7.0 |
| 5.5.31 |
+---------+
SELECT c FROM t1 ORDER BY NATURAL_SORT_KEY(c);
+---------+
| c |
+---------+
| 5.5.31 |
| 10.1.22 |
| 10.2.3 |
| 10.2.12 |
| 10.3.32 |
| 10.7.0 |
+---------+
Ik heb die ook geprobeerd maar krijg nu een error omdat ik iets niet heb ingesteld in mysql
Wat zie ik over het hoofd dan?
Toevoeging op 08/03/2024 12:10:31:
Fatal error: Uncaught mysqli_sql_exception: FUNCTION *****_db.NATURAL_SORT_KEY does not exist in /var/www/vhosts/******.nl/httpdocs/concept/defect_melden_model.php
Toevoeging op 08/03/2024 12:49:49:
@ivo, ik lees dat de database wel juist ingesteld dient te zijn voor deze functie. Dus zo eenvoudig deze ORDER BY gebruiken is er kennelijk niet bij.
Wat zie ik over het hoofd dan?
Toevoeging op 08/03/2024 12:10:31:
Fatal error: Uncaught mysqli_sql_exception: FUNCTION *****_db.NATURAL_SORT_KEY does not exist in /var/www/vhosts/******.nl/httpdocs/concept/defect_melden_model.php
Toevoeging op 08/03/2024 12:49:49:
@ivo, ik lees dat de database wel juist ingesteld dient te zijn voor deze functie. Dus zo eenvoudig deze ORDER BY gebruiken is er kennelijk niet bij.
gebruik je mysql of mariadb en welke versie?
Toevoeging op 08/03/2024 13:04:20:
aanvulling: dit is een MariaDB functie sinds versie 10.7
andere db's kennen deze functie zo te zien niet:
https://modern-sql.com/caniuse/natural_sort_key
Toevoeging op 08/03/2024 13:04:20:
aanvulling: dit is een MariaDB functie sinds versie 10.7
andere db's kennen deze functie zo te zien niet:
https://modern-sql.com/caniuse/natural_sort_key
Server: Localhost via UNIX socket
Servertype: MariaDB
Serververbinding: SSL wordt niet gebruikt Documentatie
Serverversie: 10.4.30-MariaDB-cll-lve - MariaDB Server
Protocolversie: 10
Gebruiker: db_**fix@localhost
Karakterset van server: cp1252 West European (latin1)
Servertype: MariaDB
Serververbinding: SSL wordt niet gebruikt Documentatie
Serverversie: 10.4.30-MariaDB-cll-lve - MariaDB Server
Protocolversie: 10
Gebruiker: db_**fix@localhost
Karakterset van server: cp1252 West European (latin1)
op de pagina https://stackoverflow.com/questions/153633/natural-sort-in-mysql geeft Richard Toth 2 functies om in Mysql te zetten zodat deze functionaliteit beschikbaar komt.
Toevoeging op 08/03/2024 13:13:21:
ah je hebt toch MariaDB.
Maar je hebt versie 10.7 nodig en gebruikt 10.4
Kun je zelf updaten of staat dit bij een hoster?
Toevoeging op 08/03/2024 13:13:21:
ah je hebt toch MariaDB.
Maar je hebt versie 10.7 nodig en gebruikt 10.4
Kun je zelf updaten of staat dit bij een hoster?
Ik had geen idee dat er meerdere versies zijn van een db in phpmyadmin. Ik kan het zelf niet updaten, moet ik de hoster vragen. Zou het dan simpelweg werken met die enkele order by?
Toevoeging op 08/03/2024 13:29:00:
@ivo, het wordt vandaag nog geupdated naar de nieuwste versie. Dank voor je reactie.
Toevoeging op 08/03/2024 13:29:00:
@ivo, het wordt vandaag nog geupdated naar de nieuwste versie. Dank voor je reactie.
Het zijn geen versies van een database in phpMyAdmin, maar verschillende versies van de databasesoftware MariaDB.
En phpmyadmin is niet meer dan een webbased tool om tegen een database (of meerdere databases) aan te praten.




