Avatar billede steen-h Mester
04. august 2016 - 07:50 Der er 8 kommentarer og
3 løsninger

select fra 2 tabeller med count og group

Jeg laver et udtræk fra 2 tabeller

SELECT  WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) AS valg  ,
(SELECT sum(`forandring`)  FROM `veight_1`  WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt1,
(SELECT sum(`forandring`)  FROM `veight_2`  WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt2
FROM `veight_2` AS a WHERE 1
GROUP BY valg
ORDER BY valg ASC


Det virker fint nok bortset fra at uge 53 kommer til sidst, den vil jeg gerne have som start.

valg vaegt1     vaegt2    
1     -0.45     -0.14
2     -0.67     -0.33
3     -0.40     0.09
4     -0.51     -2.01
5     -0.63     -0.38
6     -0.47     -0.48
7     -0.10     0.03
8     -1.23     -1.23
9     -0.39     -0.32
10     -0.90     -0.45
11     -0.88     -0.98
12     -0.97     -0.53



Hvis jeg skriver ORDER BY dato

GROUP BY valg
ORDER BY dato ASC


Får jeg uge 6 først og uge 10 og 11 kommer senere

valg     vaegt1     vaegt2    
6     -0.47     -0.48
7     -0.10     0.03
8     -1.23     -1.23
9     -0.39     -0.32
12     -0.97     -0.53


Hvordan løser jeg problemet ?
Avatar billede steen-h Mester
04. august 2016 - 07:56 #1
Jeg har et andet kald hvor jeg kun henter fra en tabel, der kan jeg godt sortere efter dato så uge 53 kommer først.

SELECT WEEKOFYEAR(DATE( FROM_UNIXTIME(dato))) AS valg , sum(forandring) AS antal FROM `veight_1` WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' group by valg ORDER BY dato ASC


valg     antal     
53     -0.29
1     -0.45
2     -0.67
3     -0.40
4     -0.51
5     -0.63
6     -0.47
7     -0.10
Avatar billede Rune1983 Ekspert
04. august 2016 - 08:21 #2
Ved ikke om jeg har forstået det rigtigt. Men hvis du vil have ændre ORDER BY så den fungere modsat kan det gøres sådan her.

ORDER BY valg ASC
Laves om til
ORDER BY valg DESC

Anden metode kunne også være at anvende
ORDER BY FIELD(valg,'53') ASC
Mener det burde vise noget ala
53
1
2
3
4
...
ORDER BY FIELD(valg,'53') DESC
Mener det burde vise noget ala
53
12
9
8
7
...

Har ikke testet det af. Men håber det kan bruges alligevel.
Avatar billede steen-h Mester
04. august 2016 - 08:56 #3
ORDER BY FIELD(valg,'53') ASC giver
valg     vaegt1     vaegt2     
8     -1.23     -1.23
42     NULL    NULL
23     11.39     29.33
2     -0.67     -0.33
36     NULL    NULL
17     -1.10     -1.29
49     NULL    NULL


ORDER BY FIELD(valg,'53') DESC giver
 valg     vaegt1     vaegt2     
53     -0.29     -0.25
20     2.48     7.98
52     NULL    NULL
33     NULL    NULL
14     -1.15     -0.81
46     NULL    NULL
Avatar billede Rune1983 Ekspert
04. august 2016 - 09:14 #4
ORDER BY FIELD(valg,'53') DESC, valg ASC

Hvad giver det i resultat?
Avatar billede steen-h Mester
04. august 2016 - 09:24 #5
Det gav den løsning jeg ønskede.
Mange tak for hjælpen

valg vaegt1     vaegt2     
53     -0.29     -0.25
1     -0.45     -0.14
2     -0.67     -0.33
3     -0.40     0.09
4     -0.51     -2.01
5     -0.63     -0.38
6     -0.47     -0.48
7     -0.10     0.03
Avatar billede Rune1983 Ekspert
04. august 2016 - 09:25 #6
Velbekomme. Glad for at kunne hjælpe.
Avatar billede arne_v Ekspert
04. august 2016 - 14:58 #7
Alternativt:

IF(valg=53,0,valg) ASC
Avatar billede steen-h Mester
04. august 2016 - 15:50 #8
Interessant løsning arne_v  #7

Nu er mit mysql kald noget jeg fik hjælp til for længe siden.
Hvorfor er der en AS a, den bliver jo ikke brugt ?
WHERE ny = 1 AND `dato` > '1451606400' AND dato < '1483142400' AND WEEKOFYEAR(DATE( FROM_UNIXTIME( `dato` ) )) = valg ) AS vaegt2
FROM `veight_2` AS a WHERE 1 GROUP BY valg
Avatar billede arne_v Ekspert
04. august 2016 - 15:58 #9
FROM `veight_2` AS a WHERE 1 GROUP BY valg

maa kunne laves som:

FROM veight_2  GROUP BY valg

ingen grund til AS a
ingen grund til WHERE 1
ingen grund til ``
Avatar billede arne_v Ekspert
04. august 2016 - 15:59 #10
Og saa er det efter min mening problematisk med stavefejl i navne.

vaegt er OK
weight er OK

veight er ikke OK - for stor risiko for at det vil blive skrevet forkert
Avatar billede steen-h Mester
04. august 2016 - 16:22 #11
#9
Det virker fint.

#10
Mht. stavefejl har du ret, det havde jeg ikke tænkt på.
I praksis kommer tabellerne fra database kald så jeg indtaster dem ikke selv.
Den viste kode er kun til test i phpMyAdmin
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester