Query....
->
Code (php)
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
$query = "SELECT SQL_CALC_FOUND_ROWS p.product_id,m.naam AS maatschappij,p.naam,p.standaardpremie,p.type,
v2.p10 AS vergoeding_gvs_pct,
v2.p200 AS vergoeding_gvs_max_per_jaar,
v2.tekst AS vergoeding_gvs_opmerking,
v3.p10 AS vergoeding_eigen_bijdrage_gvs_pct,
v3.p200 AS vergoeding_eigen_bijdrage_gvs_max_per_jaar,
v3.tekst AS vergoeding_eigen_bijdrage_gvs_opmerking,
v4.p10 AS vergoeding_overig_pct,
v4.p200 AS vergoeding_overig_max_per_jaar,
v4.tekst AS vergoeding_overig_opmerking,
v5.p10 AS vergoeding_zelfzorg_pct,
v5.p200 AS vergoeding_zelfzorg_max_per_jaar,
v5.tekst AS vergoeding_zelfzorg_opmerking,
a.naam AS artikel,
f.naam AS fabrikant,
a.rvg1,
a.gvs,
pr.preferent,
a.receptplichtig,
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) AS kosten,
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) - # je betaald de prijs minus de vergoeding
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
GREATEST(
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*(IFNULL(v2.p10,0)/100),
IFNULL(v2.p200,1000000000)
) - (
a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) -
LEAST(
a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*(IFNULL(v3.p10,0)/100),
IFNULL(v3.p200,1000000000)
)
), # Vergoeding door basis met aftrek eigen bijdrage (eigen bijdrage kan evt. ook weer vergoed worden door aanvullende verzekering)
0) # nooit een negatieve vergoeding (veroorzaakt door aftrekken eigen bijdrage)
),
IF(a.receptplichtig='ja',
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v4.p10,0)/100,
IFNULL(v4.p200,1000000000)
), # evt. vergoeding van niet GVS-middelen die receptprichtig zijn
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v5.p10,0)/100,
IFNULL(v5.p200,1000000000)
) # evt. vergoeding van niet GVS-middelen die niet receptprichtig zijn
)
) AS zelf_betalen,
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v2.p10,0)/100,
IFNULL(v2.p200,1000000000)
) - (a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365))
),
0) AS vergoeding_basis,
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
GREATEST(
LEAST(a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v3.p10,0)/100,IFNULL(v3.p200,1000000000)), # eigen bijdrage kan evt. ook weer vergoed worden door aanvullende verzekering
0 # nooit een negatieve vergoeding (veroorzaakt door aftrekken eigen bijdrage)
)),
IF(a.receptplichtig='ja',
LEAST(a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v4.p10,0)/100,IFNULL(v4.p200,1000000000)), # evt. vergoeding van niet GVS-middelen die receptplichtig zijn
LEAST(a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v5.p10,0)/100,IFNULL(v5.p200,1000000000)) # evt. vergoeding van niet GVS-middelen die niet receptplichtig zijn
)
) AS vergoeding_av
FROM product p
INNER JOIN maatschappij m ON m.maatschappij_id = p.maatschappij_id
LEFT JOIN vwd_sheet_label v2 ON v2.vwd_sheet_id = p.vwd_sheet_id AND v2.vwd_label_id = ".$labels['vergoeding_gvs']."
LEFT JOIN vwd_sheet_label v3 ON v3.vwd_sheet_id = p.vwd_sheet_id AND v3.vwd_label_id = ".$labels['vergoeding_eigen_bijdrage_gvs']."
LEFT JOIN vwd_sheet_label v4 ON v4.vwd_sheet_id = p.vwd_sheet_id AND v4.vwd_label_id = ".$labels['vergoeding_overig']."
LEFT JOIN vwd_sheet_label v5 ON v5.vwd_sheet_id = p.vwd_sheet_id AND v5.vwd_label_id = ".$labels['vergoeding_zelfzorg']."
JOIN med_artikel a ON a.artikel_id IN(".$this->dbImplode($data['artikel_id']).")
INNER JOIN med_fabrikant f ON a.fabrikant_id = f.fabrikant_id
INNER JOIN med_medicijn mm ON mm.medicijn_id = a.medicijn_id
LEFT JOIN med_preferent pr ON p.maatschappij_id = pr.maatschappij_id AND a.artikel_id = pr.artikel_id
WHERE p.maatschappij_id = ".(int)$_SESSION['medicijnen']['verzekeraar']."
AND p.actief = 'ja'
AND p.tonen_medicijnvergoedingen = 'ja'
ORDER BY {ORDER_BY}
LIMIT {LIMIT_START},30";
v2.p10 AS vergoeding_gvs_pct,
v2.p200 AS vergoeding_gvs_max_per_jaar,
v2.tekst AS vergoeding_gvs_opmerking,
v3.p10 AS vergoeding_eigen_bijdrage_gvs_pct,
v3.p200 AS vergoeding_eigen_bijdrage_gvs_max_per_jaar,
v3.tekst AS vergoeding_eigen_bijdrage_gvs_opmerking,
v4.p10 AS vergoeding_overig_pct,
v4.p200 AS vergoeding_overig_max_per_jaar,
v4.tekst AS vergoeding_overig_opmerking,
v5.p10 AS vergoeding_zelfzorg_pct,
v5.p200 AS vergoeding_zelfzorg_max_per_jaar,
v5.tekst AS vergoeding_zelfzorg_opmerking,
a.naam AS artikel,
f.naam AS fabrikant,
a.rvg1,
a.gvs,
pr.preferent,
a.receptplichtig,
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) AS kosten,
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) - # je betaald de prijs minus de vergoeding
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
GREATEST(
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*(IFNULL(v2.p10,0)/100),
IFNULL(v2.p200,1000000000)
) - (
a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365) -
LEAST(
a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*(IFNULL(v3.p10,0)/100),
IFNULL(v3.p200,1000000000)
)
), # Vergoeding door basis met aftrek eigen bijdrage (eigen bijdrage kan evt. ook weer vergoed worden door aanvullende verzekering)
0) # nooit een negatieve vergoeding (veroorzaakt door aftrekken eigen bijdrage)
),
IF(a.receptplichtig='ja',
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v4.p10,0)/100,
IFNULL(v4.p200,1000000000)
), # evt. vergoeding van niet GVS-middelen die receptprichtig zijn
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v5.p10,0)/100,
IFNULL(v5.p200,1000000000)
) # evt. vergoeding van niet GVS-middelen die niet receptprichtig zijn
)
) AS zelf_betalen,
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
LEAST(
a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v2.p10,0)/100,
IFNULL(v2.p200,1000000000)
) - (a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365))
),
0) AS vergoeding_basis,
IF(a.gvs='ja',
IF(pr.preferent='nee',
0, # niet-preferentie middelen worden niet vergoed
GREATEST(
LEAST(a.eigen_bijdrage/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v3.p10,0)/100,IFNULL(v3.p200,1000000000)), # eigen bijdrage kan evt. ook weer vergoed worden door aanvullende verzekering
0 # nooit een negatieve vergoeding (veroorzaakt door aftrekken eigen bijdrage)
)),
IF(a.receptplichtig='ja',
LEAST(a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v4.p10,0)/100,IFNULL(v4.p200,1000000000)), # evt. vergoeding van niet GVS-middelen die receptplichtig zijn
LEAST(a.prijs/a.inkoopaantal*IFNULL({AANTAL},a.ddd*365)*IFNULL(v5.p10,0)/100,IFNULL(v5.p200,1000000000)) # evt. vergoeding van niet GVS-middelen die niet receptplichtig zijn
)
) AS vergoeding_av
FROM product p
INNER JOIN maatschappij m ON m.maatschappij_id = p.maatschappij_id
LEFT JOIN vwd_sheet_label v2 ON v2.vwd_sheet_id = p.vwd_sheet_id AND v2.vwd_label_id = ".$labels['vergoeding_gvs']."
LEFT JOIN vwd_sheet_label v3 ON v3.vwd_sheet_id = p.vwd_sheet_id AND v3.vwd_label_id = ".$labels['vergoeding_eigen_bijdrage_gvs']."
LEFT JOIN vwd_sheet_label v4 ON v4.vwd_sheet_id = p.vwd_sheet_id AND v4.vwd_label_id = ".$labels['vergoeding_overig']."
LEFT JOIN vwd_sheet_label v5 ON v5.vwd_sheet_id = p.vwd_sheet_id AND v5.vwd_label_id = ".$labels['vergoeding_zelfzorg']."
JOIN med_artikel a ON a.artikel_id IN(".$this->dbImplode($data['artikel_id']).")
INNER JOIN med_fabrikant f ON a.fabrikant_id = f.fabrikant_id
INNER JOIN med_medicijn mm ON mm.medicijn_id = a.medicijn_id
LEFT JOIN med_preferent pr ON p.maatschappij_id = pr.maatschappij_id AND a.artikel_id = pr.artikel_id
WHERE p.maatschappij_id = ".(int)$_SESSION['medicijnen']['verzekeraar']."
AND p.actief = 'ja'
AND p.tonen_medicijnvergoedingen = 'ja'
ORDER BY {ORDER_BY}
LIMIT {LIMIT_START},30";
Gewijzigd op 07/09/2010 10:55:28 door Niels K
Leuke query ^^
haha indeed, had nog nooit zo 1 gemaakt
leuk debuggen...
Werkte in 1 keer;)
wat is de reactietijd?
Dat zou ik niet durven te zeggen.
Tobias Witmer op 07/09/2010 21:31:05:
netjes.
wat is de reactietijd?
wat is de reactietijd?
Hah was ook mijn eerste idee toen ik dit zag (reacties nog niet gelezen :p)
Flinke query inderdaad. Volle tabellen en joins gaan niet heel vaak goed samen ;-)
Leuk om te zien dat jij ook af en toe eens post, Bas :)!
Paradox - op 07/09/2010 23:19:08:
Leuk om te zien dat jij ook af en toe eens post, Bas :)!
Ja, sinds de nieuwe versie van PHPhulp is hij er steeds vakenr
Waarvoor is het als ik vragen mag? *niet nieuwsgierig, maar vraag het me gewoon af :P*
Quote:
Nette query. Erg duidelijk om te lezen zo op het eerste gezicht.
Dankjewel
Quote:
Waarvoor is het als ik vragen mag?
Beetje lastig uit te leggen, en i.v.m beroepsgeheim mag ik hem ook niet helemaal ontleden voor je.. Kort samen gevat is het selecteren van verzekeringsmaatschappijen, met alle toeters en bellen:)
Gewijzigd op 11/09/2010 12:12:14 door Steff an
Steff an op 11/09/2010 11:20:44:
Beroepsgeheim?! Had je die query hier dan wel mogen plaatsen? Ontleden dan kunnen we zelf ook nog wel.
Zat ik ook zo te denken, de meesten kunnen die query zelf wel ontleden en er grotendeels uit afleiden welke informatie je selecteert :p
Gewijzigd op 11/09/2010 12:11:29 door Steff an
Weet ik.. Vandaar dat ik hem in de koffiehoek plaatste:)
BTW: Ik heb ook stukken eruit gehaald, omdat daar namen in voor kwamen.