Door
- DHU -
op 22-02-2019 22:03
gewijzigd op 22-02-2019 22:03
2.990 views
Hallo guys,
ik heb een order issue met een datum. Echter het datumveld in de database is geen datetime veld maar een varchar. Of dat slim is kunnen we over hebben.. maar het is nu eenmaal een gegeven. Zou mijn keus niet zijn geweest.
maar daardoor nu een sorteerprobleem en het lukt met niet op het op te lossen.. het is opgeslagen als d-m-jjjj. Dagen en maanden hebben geen voorloopnullen. Ik heb STR_TO_DATE() maar dit lijkt geen invloed te hebben echter ook geen foutmelding
Ook heb ik CONVERT(datetime, ENDDATE, 105) geprobeerd maar dan krijg ik de foutmelding: mysqli_num_rows() expects parameter 1
my SELECT luidt:
$sqlUitlezen = mysqli_query($connection, $sql = "
SELECT
person.MSKEYVALUE_MEDEWERKER AS ASN,
person.EMPLOYEENUMBER AS PersNr,
person.DISPLAYNAME AS Naam,
person.ENDDATE AS UitdienstDatum,
person.HIREDATE AS InDiensDatum,
REF_OU AS IDMContainer
FROM
person
WHERE REF_OU = 'OU:99999999' CONVERT(datetime, ENDDATE, 105);
");
Dit:
> mysqli_num_rows() expects parameter 1 ???
is trouwens maar een halve foutmelding.
Wanneer een query syntactisch niet goed is levert een aanroep voor het uitvoeren doorgaans false op. Nog voordat je dingen met het resultaat doet of probeert te doen (num_rows, fetch_whatever) is het zaak dat je eerst controleert of de query is geslaagd. Als hier geen sprake van is kun je alle vervolgacties rustig staken.
Ik zou je (toch) nogmaals het advies willen geven om de databasestructuur op orde te maken, want nu ben je enkel bezig met symptoombestrijding. Dit is eigenlijk de enige juiste oplossing.
Indien deze database niet in jouw beheer is zou je de eigenaar kunnen vragen om de datumkolommen te converteren. Of, wanneer dit om backwards compatible redenen niet mogelijk is (meerdere partijen hebben oplossingen lopen breien om dit slecht ontwerp tegemoet te komen) zou je een nieuwe kolom kunnen (laten) aanmaken die wel een zinnig datumformaat heeft waarmee je kunt rekenen.
Nogmaals, elke andere oplossing is tot op zekere hoogte onzinnig omdat je allerlei doekjes voor het bloeden introduceert.
Het idee van een database is ook dat je hier makkelijk informatie uit zou moeten kunnen halen. Wanneer dit niet lukt dan is er simpelweg iets mis met het ontwerp.
Je kunt hier of een heleboel (overbodig) programmeerwerk tegenaan gooien, of het gewoon op de juiste plek oplossen.
Misschien in de ORDER BY sorteren met de MySQL str_to_date function??
SELECT
.
.
.
.
ORDER BY str_to_date(ENDDATE,'%Y-%m-%d');
waarbij je het format %Y-%m-%d nog wel even in het door jou gebruikte model moet zetten en eventueel foute data in een case structuur wegselecteren om MySQL foutmeldingen te voorkomen.
@Aad... thnkx.. dit is voor nu iets dat werkt. thnx
@Thomas.. ik kan je niet anders dan gelijk geven. Maar meer dan dit gegeven zit er toch echt niet in. Ben het met je eens dat de opbouw op deze manier belabberd is en dat je dan achter de feiten aanloopt door allerlei houtje-touwtje oplossing en veel corretiewerk te doen.. Maar het is uitgesloten dat ze de database aanpassen, Heb ik er al meerdere malen om verzocht.. zonder resultaat