Alle patiënten in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Johanna Janssen

Johanna Janssen

30/04/2014 14:23:10
Quote Anchor link
Hallo,

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?
 
PHP hulp

PHP hulp

17/11/2024 02:34:10
 
Erwin H

Erwin H

30/04/2014 14:38:23
Quote Anchor link
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.
 
Johanna Janssen

Johanna Janssen

30/04/2014 16:04:28
Quote Anchor link
Bedankt!
 
Ivo P

Ivo P

30/04/2014 16:35:41
Quote Anchor link
en volgens mij gaat er ook nog iets mis met je regeltje "group by".

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
 
Johanna Janssen

Johanna Janssen

30/04/2014 16:38:40
Quote Anchor link
Dankjewel

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.
 
Erwin H

Erwin H

30/04/2014 17:41:39
Quote Anchor link
Ik zou dat dan in de join voorwaarde verwerken, want in feite wil je dus alleen de recepten krijgen waarvan de datum voor een bepaalde datum ligt. De 'lege' waarde krijg je dan automatisch:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

30/04/2014 17:42:37
Quote Anchor link
Kan je eens wat meer uitleg geven over wat je nu precies aan het maken bent, bijv wat datumx en datumy nu precies inhouden.
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.