Toon posts:

[sql] Resultaat wordt soms niet goed gesorteerd

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als eerste, de query:
SQL:
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
SELECT project.projectgegevensID AS Id,
       project.projectNaam AS Projectnaam,
       project.projectontwikkelaarNaam AS Projectontwikkelaar,
       Rapport.rapportDatum AS Rapportdatum,
       project.aantalWoningen AS AantalWoningen,
       (SUM((projectgegevens_epc.bouwaanvraagEPC - projectgegevens_epc.inspectieEPC) / projectgegevens_epc.bouwaanvraagEPC * 100) / COUNT(*)) AS EpcAfwijking,
       (
           SELECT cms_module_feusers_properties.data
           FROM cms_module_feusers_properties
           WHERE cms_module_feusers_properties.title = 'fullname'
           AND cms_module_feusers_properties.userid = project.eindverantwoordelijke
       ) AS Inspecteur,
       (
           SELECT cms_module_feusers_properties.data
           FROM cms_module_feusers_properties
           WHERE cms_module_feusers_properties.title = 'telephone'
           AND cms_module_feusers_properties.userid = project.eindverantwoordelijke
       ) AS Telefoon,
       project.status AS Status
FROM project
     LEFT JOIN projectgegevens_epc
         USING (projectgegevensID)
     LEFT JOIN Rapport
         USING (projectgegevensID)
WHERE project.contactID = '6'
GROUP BY projectgegevens_epc.projectgegevens_epcID
ORDER BY EpcAfwijking, Id ASC


Het resultaat:
code:
1
2
3
Id  Projectnaam       Projectontwikkelaar  Rapportdatum  AantalWoningen  EpcAfwijking           Inspecteur     Telefoon   Status  
2   De bollenakker II Heijmans NV          NULL          14              NULL                   Jan Inspecteur 0123456789 1 
1   De bollenakker    Bouwlust BV          2007-06-24    25              -28.749994505196891000 Jan Inspecteur 0123456789 1


En het probleem:
Of ik nou ascending of descending deze query laat sorteren, het resultaat is altijd hetzelfde.

Het ophalen van de gegevens an sich gaat gewoon goed. Alleen het sorteren van kolommen zoals EpcAfwijking en Rapportdatum (welke een NULL waarde kunnen bevatten) gaat niet goed. Als ik als tweede order by kolom Id weghaal, dan gaat het sorteren van EpcAfwijking en Rapportdatum wel goed, echter gaat dan het sorteren op bijvoorbeeld Status niet goed (welke dezelfde waarde hebben).

Ik heb gezocht op internet en oplossingen met COALESCE bekeken, maar geen ervan werkte. Ik ben nou ook weer niet zo'n SQL goeroe dat ik alles weet (helaas).

Oh jah, gebruik MySql 5.0.27.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

Om te beginnen mis ik een berg velden in je group by. Daarnaast sorteer je op twee kolommen. Waarschijnlijk is er per ID maar 1 EpcAfwijking en in dat geval gaat de ASC of DESC op id natuurlijk geen ene kont uitmaken ;).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Dat van group by wist ik niet, zal er gelijk naar kijken.

En order by, is het niet zo dat hij als eerste op epcafwijking gaat sorteren en dan op id ?

  • user109731
  • Registratie: Maart 2004
  • Niet online
Verwijderd schreef op maandag 25 juni 2007 @ 16:23:
Dat van group by wist ik niet, zal er gelijk naar kijken.

En order by, is het niet zo dat hij eerste op epcafwijking gaat sorteren en dan op id ?
Klopt, maar in je voorbeeld staan 2 verschillende waarden voor epcafwijking... Hij gaat enkel op id sorteren als epcafwijking voor 2 of meer rijen gelijk is :)

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:32

Janoz

Moderator Devschuur®

!litemod

Nee. Zoals je het daar nu hebt staan gaat hij eerst op id ASC sorteren en daarna op EpcAfwijking. Het komt er dus feitelijk op neer dat de id sortering alleen in stand blijft wanneer EpcAfwijking gelijk is. Verder slaat de ASC enkel op id.

[ Voor 29% gewijzigd door Janoz op 25-06-2007 16:26 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
In dat geval moet het toch gewoon goed gaan?

Zonder die Id in ORDER BY gaat het sorteren op EpcAfwijking goed, met Id erbij, gaat het niet goed, dus als hij in eerste instantie sorteert op EpcAfwijking en dan (in het geval van zelfde EpcAfwijking) op Id, waarom blijft ie dan hetzelfde resultaat geven ?

edit:
Janoz schreef op maandag 25 juni 2007 @ 16:25:
Verder slaat de ASC enkel op id.
Ok, dat scheelt al de helft, heb de ASC verplaatst naar de juiste locatie en nu gaat het met de test data goed. Moet alleen nog kijken naar GROUP BY, wil namelijk niet dat het op een andere manier nog fout kan gaan.

[ Voor 38% gewijzigd door Verwijderd op 25-06-2007 16:28 ]


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Neem eens een aantal voorbeeld waardes voor beide kolommen en geef eens aan waarom jij deze rijen verkeerd gesorteerd vind worden.
Verwijderd schreef op maandag 25 juni 2007 @ 16:26:
Zonder die Id in ORDER BY gaat het sorteren op EpcAfwijking goed, met Id erbij, gaat het niet goed, dus als hij in eerste instantie sorteert op EpcAfwijking en dan (in het geval van zelfde EpcAfwijking) op Id, waarom blijft ie dan hetzelfde resultaat geven ?
Wát gaat er niet goed? Het kan best wel hetzelfde resultaat geven, namelijk als het resultaat toevallig al op id gesorteerd was voor rijen met gelijke EpcAfwijking.
Verwijderd schreef op maandag 25 juni 2007 @ 16:26:
IOk, dat scheelt al de helft, heb de ASC verplaatst naar de juiste locatie en nu gaat het met de test data goed.
Goeie gewoonte: altijd bij elke kolom in de order by clause de richting expliciet noemen.

[ Voor 18% gewijzigd door Voutloos op 25-06-2007 16:31 ]

{signature}


Verwijderd

Topicstarter
Dat verkeerd sorteren sloeg op het feit dat zowel als op ascending als op descending het resultaat exact bleef, maar zoals ik al hierboven vermelde (waarschijnlijk toen jij je bericht aan het schrijven was) kwam dat doordat de ASC gewoon op de verkeerde plaats stond.

edit:
Voutloos schreef op maandag 25 juni 2007 @ 16:29:
Goeie gewoonte: altijd bij elke kolom in de order by clause de richting expliciet noemen.
Ik heb het door :>

[ Voor 30% gewijzigd door Verwijderd op 25-06-2007 16:36 ]


  • XangadiX
  • Registratie: Oktober 2000
  • Laatst online: 26-05 15:01

XangadiX

trepanatie is zóó kinderachtig

>>> prg

Stoer; Marduq

Pagina: 1