Alle patiënten in tabel
Ik ben bezig met het maken van een overzichtstabel van het gebruik bij geneesmiddelen bij ouderen.
In de eerste kolom heb ik de patiëntnummers staan, daarnaast de leeftijd. Daarna komen de kolommen met de verschillende medicijnen. Hierin zijn de hoeveelheden van de verschillende recepten bij elkaar opgeteld uit een receptentabel. Ook heb ik aangegeven dat ik het gebruik wil weten in een bepaalde periode van 100 dagen (deze gegevens staan in de tabel ‘periode’). In de tabel periode staan alle patiënten, maar in de tabel met recepten niet.
Dit heb ik als volgt gedaan:
SELECT
patientnummer, leeftijd,
SUM(IF(MED like 'paracetamol' AND TIMESTAMPDIFF(DAY, xdate, zdate) BETWEEN 0 AND 100, recept, 0)) paracetamol,
(etc..)
FROM periode INNER JOIN recepten USING(patientnummer)
WHERE xdate < ydate
group by anopat
Dit gaat allemaal goed, maar het probleem is dat de patiënten die geen recepten hebben in de receptentabel, niet in mijn tabel komen. Ik zou willen dat deze patiëntnummers er ook gewoon bij staan in de patiëntenkolom en dat er dan in de tabellen van de medicijnen 0 of – komt te staan.
Hoe kan ik dit aanpakken?
Geen INNER JOIN gebruiken, maar een LEFT JOIN. Een INNER JOIN selecteert alleen de records die in beide tabellen een match hebben. Een LEFT JOIN selecteert alle records uit de 'linker' tabel (in dit geval is dat de tabel 'periode') en selecteert daarbij waar mogelijk de records uit de 'rechter' tabel (in dit geval 'recepten'). Zo krijg je dus alle patienten, plus de gegevens van de recepten die wel bekend zijn.
Bedankt!
Dat hoeft niet tot een foutmelding te leiden, maar wil niet zeggen dat het daarmee de goede resultaten oplevert.
http://wiki.pfz.nl/group-by
Toevoeging op 30/04/2014 16:46:25:
Ik heb het zojuist even opnieuw geprobeerd, nu met LEFT JOIN ipv INNER JOIN.
Ik krijg nog niet het juiste aantal patiënten.
Wanneer ik de regel WHERE xdate < ydate weghaal, krijg ik wel het juiste aantal patiënten.
Dus alle patiënten die hun medicijnen na datum y hebben gekregen zijn weggelaten uit de tabel.
Is het mogelijk om een dergelijke opdracht te geven: wanneer datum x niet voor datum y ligt, vul dan 0 in.
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
SELECT patientnummer, leeftijd,
SUM(IF(MED like 'paracetamol' AND TIMESTAMPDIFF(DAY, xdate, zdate) BETWEEN 0 AND 100, recept, 0)) paracetamol,
(etc..)
FROM periode
LEFT JOIN recepten ON (
periode.patientnummer = recepten.patientnummer
AND xdate < ydate
)
GROUP BY patientnummer, leeftijd, etc
SUM(IF(MED like 'paracetamol' AND TIMESTAMPDIFF(DAY, xdate, zdate) BETWEEN 0 AND 100, recept, 0)) paracetamol,
(etc..)
FROM periode
LEFT JOIN recepten ON (
periode.patientnummer = recepten.patientnummer
AND xdate < ydate
)
GROUP BY patientnummer, leeftijd, etc
Ik krijg, mede door je andere topics, een beetje het idee dat je de database stukken beter kunt opzetten.
Je hebt het altijd over patienten, maar heb je dan geen patienten table?
Gewijzigd op 30/04/2014 17:44:55 door Ger van Steenderen