Eerste keer dat ik iets in P&W post, tot nu toe kwam ik er altijd zelf uit. Ik zal eerst even uitleggen waar ik mee bezig ben. Het is een statssysteem voor DC-project D2OL in PHP+MYSQL.
Ik heb een tabel d2ol_userdagstats, waarin elke avond om 0:00 de stats van die dag worden opgeslagen, en een tabel d2ol_userhalfuurstats waarin elk half uur de stats van die dag worden opgeslagen.
Het gaat over de halfuurtabel, hierin sla ik op:
aantal
dagpositie
dagverschil (verschil met dagpositie van gisteren)
overallpositie
overallverschil (verschil met overallpositie van gisteren)
Deze informatie wordt alleen opgeslagen voor actieve gebruikers, maar voor overallpositie moet er wel vergeleken worden met de inactieve gebruikers.
Nu heb ik daarvoor dit SQL statement gemaakt:
En dat geeft dit resultaat:
Wat er dus aan de hand is, is dat als er geen halfuurstats gedefinieerd zijn, hij bij de optelling het resultaat NULL geeft. Om eea even te illusteren:
De query hiervan was:
Mijn vraag is dus of het mogelijk is om die NULL uit de join als 0 te laten tellen zodat de optelling slaagt, en ik een overallpositie kan bepalen?
Ik heb (natuurlijk) gezocht op GoT (waar niet zo veel te vinden was) en op mysql.com en google, maar je vind zo ontzettend veel als je zoekt op 0 as NULL in JOIN +mysql terwijl het allemaal hier niet mee te maken heeft.
Ik heb een tabel d2ol_userdagstats, waarin elke avond om 0:00 de stats van die dag worden opgeslagen, en een tabel d2ol_userhalfuurstats waarin elk half uur de stats van die dag worden opgeslagen.
Het gaat over de halfuurtabel, hierin sla ik op:
aantal
dagpositie
dagverschil (verschil met dagpositie van gisteren)
overallpositie
overallverschil (verschil met overallpositie van gisteren)
Deze informatie wordt alleen opgeslagen voor actieve gebruikers, maar voor overallpositie moet er wel vergeleken worden met de inactieve gebruikers.
Nu heb ik daarvoor dit SQL statement gemaakt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| select
sum(a.aantal)+b.aantal as combo_aantal,
a.userid
from
d2ol_userdagstats as a
left join
d2ol_userhalfuurstats as b
on
a.userid=b.userid
group by
a.userid
order by
combo_aantal desc; |
En dat geeft dit resultaat:
code:
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
28
29
30
31
32
33
34
| +--------------+--------+ | combo_aantal | userid | +--------------+--------+ | NULL | 19 | | NULL | 20 | | NULL | 8 | | NULL | 21 | | NULL | 22 | | NULL | 10 | | NULL | 23 | | NULL | 11 | | NULL | 24 | | NULL | 12 | | NULL | 25 | | NULL | 13 | | NULL | 26 | | NULL | 27 | | NULL | 16 | | NULL | 17 | | NULL | 18 | | 47709 | 2 | | 9016 | 1 | | 8372 | 14 | | 7218 | 15 | | 3646 | 9 | | 1241 | 3 | | 610 | 5 | | 478 | 4 | | 460 | 31 | | 364 | 29 | | 124 | 7 | | 114 | 30 | | 49 | 6 | +--------------+--------+ |
Wat er dus aan de hand is, is dat als er geen halfuurstats gedefinieerd zijn, hij bij de optelling het resultaat NULL geeft. Om eea even te illusteren:
code:
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
28
29
30
31
32
33
34
| +-----------+----------------+--------+ | db_aantal | vandaag_aantal | userid | +-----------+----------------+--------+ | 47709 | 0 | 2 | | 17861 | NULL | 10 | | 8991 | 25 | 1 | | 8372 | 0 | 14 | | 7218 | 0 | 15 | | 6049 | NULL | 13 | | 3646 | 0 | 9 | | 3615 | NULL | 12 | | 3381 | NULL | 24 | | 2646 | NULL | 20 | | 1614 | NULL | 19 | | 1216 | 25 | 3 | | 975 | NULL | 22 | | 911 | NULL | 17 | | 698 | NULL | 21 | | 684 | NULL | 18 | | 610 | 0 | 5 | | 518 | NULL | 16 | | 478 | 0 | 4 | | 460 | 0 | 31 | | 379 | NULL | 25 | | 370 | NULL | 8 | | 364 | 0 | 29 | | 330 | NULL | 27 | | 226 | NULL | 23 | | 186 | NULL | 26 | | 172 | NULL | 11 | | 124 | 0 | 7 | | 114 | 0 | 30 | | 49 | 0 | 6 | +-----------+----------------+--------+ |
De query hiervan was:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| select
sum(a.aantal) as db_aantal,
b.aantal as vandaag_aantal,
a.userid
from
d2ol_userdagstats as a
left join
d2ol_userhalfuurstats as b
on
a.userid=b.userid
group by
a.userid
order by
db_aantal desc; |
Mijn vraag is dus of het mogelijk is om die NULL uit de join als 0 te laten tellen zodat de optelling slaagt, en ik een overallpositie kan bepalen?
Ik heb (natuurlijk) gezocht op GoT (waar niet zo veel te vinden was) en op mysql.com en google, maar je vind zo ontzettend veel als je zoekt op 0 as NULL in JOIN +mysql terwijl het allemaal hier niet mee te maken heeft.