Ik heb een veld (INT) ingesteld als FOREIGN KEY naar een autoincrement veld (INT).
Maar als ik nu ORDER BY veld doe dan wordt dat alfabetisch gedaan en niet numeric.
Thanks.
Maar dat is voor MariaDB.
Ik heb mySQL en die heeft dat helaas niet.
Het gekke vind ik dat het allemaal getallen (INT) zijn en toch wordt het als tekst behandeld.
[size=xsmall]Toevoeging op 02/04/2023 14:18:46:[/size]
Het ophalen van de veldwaarde stond in een if(..., '', veldwaarde) statement.
Ik heb de if() verwijderd en nu gaat het wel goed.
Lijkt er op dat het kwam doordat er een lege string staat in de if().
Ja die had ik ook reeds gevonden.
Bedankt voor de hulp.
Maar zoals ik hierboven heb geschreven is het opgelost.
Ik heb de if() anders gemaakt.
En nu staat het bewuste veld niet meer in de if() en werkt het goed.
SanThe.
?Onbekende gebruiker
02-04-2023 21:05
gewijzigd op 02-04-2023 21:07
MySQL doet wat PHP ook doet, het werkt met impliciete type casts. Dat IF()-statement zette zonder dat je het in de gaten had, de waardes om van int naar strings. Weghalen van het if()-statement haalt de oorzaak van het probleem weg.
Het komt omdat de constructie if(..., '', veldwaarde) integers combineert met strings. MySQL kan wel alle ints omzetten naar strings, maar niet andersom, vandaar.
Wanneer je strings sorteert in een database, moet je iets weten over collaties. Maak je bijvoorbeeld gebruik van UTF-8 (utf8mb4) dan gebruikt MySQL de standaardcollatie utf8mb4_0900_ai_ci. Je kunt een standaardcollatie instellen voor de hele database, per tabel en zelfs per kolom. Stel je wilt kastongevoelig sorteren op de standaard Unicode manier, dan gebruik je de collatie utf8mb4_unicode_ci:
ORDER BY kolom_met_strings COLLATE utf8mb4_unicode_ci;
Je hoeft de collatie alleen op te geven wanneer deze afwijkt van de standaardcollatie.