20. september 2004 - 14:46Der er
10 kommentarer og 1 løsning
tabel sorteringsfejl
Jeg kan se at min tabel's ID-felt (auto_increment) har en forkert rækkefølge, hvilket er rigtig problematisk med min GROUP BY funktion i flere af mine SQL'er.
Det er altså den rækkefølge på rækkerne DATABASEN laver i tabellerne og altså ikke nogen jeg laver med en ORDER BY.
Jeg tror ikke at mine SQL-statements vil gøre nogen gavn her, men hvis i insistere vil jeg smide dem her ind.
Hvad skyldes den forkerte rækkefølge og hvad vigtigere er: hvordan får jeg rettet op på tabellens "indvendige" rækkefølge?
SELECT A.threadID, A.threadParent, A.threadForum, A.threadGroup, A.threadTitle, A.threadUser, A.threadDisplayName, A.threadClicks, A.threadType, A.threadDateTime, IF(MAX(A.threadDateTime) > A.threadDateTime, MAX(A.threadDateTime), null) AS MaxOfDate, IF(MAX(A.threadID) > A.threadID, MAX(A.threadID), null) AS MaxOfID, SUM(IF(A.threadParent > 0, 1, 0)) AS threadIndlaeg, IF((B.trackStamp), 0, 1) AS trackNew, IF(MAX(A.threadDateTime) > B.trackStamp, 1, 0) AS trackOld FROM bdal_beboerforum_threads A LEFT JOIN bdal_beboerforum_tracking B ON B.trackThread = A.threadID AND B.trackUser = 'somename' WHERE A.threadForum = 4 GROUP BY A.threadGroup ORDER BY A.threadID, A.threadType DESC, trackNew DESC, trackOld DESC, MaxOfDate DESC, A.threadDateTime DESC
Jeg kan fjerne ORDER BY helt og stadig få et forkert resultat.. altsammen bare fordi at id 40 der hører sammen med id 31 ligger FØR id 31... Det jeg vil returnere med GROUP BY er id 31's værdier, ikke 40 eller 39 eller 38.. Jeg groupere kun pga. mine MAX, SUM og andre GROUP-relerterede funktioner. :D
Hvorfor satan skal den dog gøre sådan en ond ting efter 20+ timers udvikling ?? :>
Er du opmærksom på at hvis der er mere end en værdi for felter du selecter som ikke er i GROUP BY for hver værdi af de felter der er med i GROUP BY, så bliver resultatet helt "tilfældigt" ?
Nej det var jeg vist ikke klar over, men løsningen blev at lave en LEFT JOIN på tabellen:
LEFT JOIN bdal_beboerforum_threads C ON C.threadParent = A.threadID
og så afgrænse WHERE til i principet kun at være een række, hvilket gør GROUP BY overflødelig... den er der dog stadig væk af bekvemhedsårsager pga. MAX, SUM etc. og det er med dets eget ID
Tak for jeres interesse.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.