Query hulp

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Moe BE

Moe BE

30/07/2010 09:54:20
Quote Anchor link
Hallo,

Ik zit met een query probleem!

mijn tabellen
*tblwerknemers
-werknemerId
-naam

*tblKalenderType
-typeId
-type

*tblKalenderpunt
-kalenderpuntId
-dagId
-werknemerId
-typeId
-information

Ik zit met het volgende:
Als mijn kalendertype feestdag is, dan is deze op iedereen van toepassing en staat mijn werknemerId in tblKalenderpunt op 0, deze werknemer bestaat dus niet en dat zorgt voor moeilijkheden bij het ophalen van "naam", "type" en "information". Momenteel beschik ik over volgende query.

"SELECT tblKalenderType.type, tblWerknemers.naam, tblKalenderpunt.information, tblKalenderpunt.kalenderpuntId FROM tblWerknemers, tblKalenderpunt, tblKalenderType WHERE tblKalenderpunt.dagId = 193 AND tblKalenderpunt.werknemerId = tblWerknemers.werknemerId AND tblKalenderpunt.typeId = tblKalenderType.typeId"

Bij uitvoeren van deze query zitten mijn feestdagen dus niet in het resultaat omdat hier geen werknemer voor bestaat.

Weet iemand hoe ik dit kan oplossen? (liefst op basis van de query).
 
PHP hulp

PHP hulp

20/02/2025 04:02:24
 
Johan Dam

Johan Dam

30/07/2010 10:08:52
Quote Anchor link
AND tblKalenderpunt.werknemerId = tblWerknemers.werknemerId

veranderen in

AND (tblKalenderpunt.werknemerId = tblWerknemers.werknemerId OR tblKalenderpunt.werknemerId IS NULL)

ipv de IS NULL kan je ook = '' doen, dit hangt er maar net vanaf hoe je het opslaat in de database
 
Spike Spade

Spike Spade

30/07/2010 10:10:08
Quote Anchor link
Sorry ik heb nu even geen tijd om het te testen.

Maar ik zou proberen om het op te lossen met een outer join.

tabel en veld benamingen zou ik trouwens niet kamelcase doen!
 
John D

John D

30/07/2010 10:20:55
Quote Anchor link
oplossen moet inderdaad met een outer-join. Je krijgt dan ook de records met feestdagen in het resultaat. Ik heb geen voorbeeld voor je omdat ik in MySQL sql nog geen outer joins heb gebouwd (wel in oracle sql maar dat werkt niet in mysql....)
 
Moe BE

Moe BE

30/07/2010 10:26:40
Quote Anchor link
@Johan: Dit biedt geen oplossing omdat je dan gewoon voor elke werknemer een record krijgt, terwijl je er eigenlijk maar 1 moet hebben waar geen werknemer in vermeld staat.
 
Hipska BE

Hipska BE

30/07/2010 10:35:50
Quote Anchor link
Mijn eerste idee was ook om per werknemer zo'n extra recordje toe te laten voegen (kan automatisch met 1 query gedaan worden, dus niet extra werk) maar dat loopt na een tijdje mis als er werknemers bij komen bijvoorbeeld.

Vervolgens raad ik je aan om met JOIN te gaan werken ipv die AND telkens bij de WHERE. Het zal je query veel overzichtelijker houden en het kan een oplossing bieden net als Spike Spade zegt dmv een outer join of iets dergelijks toe te passen. Als je dit doet, dan zal bij de velden waar geen link is naar een werknemer (staat op NULL, ik zou niet opteren voor 0 want dat kan ook een ID zijn) het veld tbwerknemers.naam NULL zijn.

(waarom trouwens tbl ervoor? Het IS toch al een table? Kan je het verwarren met iets anders dan?)
 
Moe BE

Moe BE

30/07/2010 10:55:02
Quote Anchor link
Dan zal ik eens aan de slag gaan met Joins.

Hipska BE op 30/07/2010 10:35:50:
(waarom trouwens tbl ervoor? Het IS toch al een table? Kan je het verwarren met iets anders dan?)


Ik heb het zo aangeleerd gekregen op school en blijven doen.
 
Hipska BE

Hipska BE

30/07/2010 11:03:43
Quote Anchor link
Nooit dingen doen die men je aanleert op school qua programmeerstijl :p
 
Moe BE

Moe BE

30/07/2010 11:26:10
Quote Anchor link
En de resulterende query is:

SELECT * FROM (tblKalenderpunt LEFT JOIN tblWerknemers ON tblKalenderpunt.werknemerId = tblWerknemers.werknemerId) LEFT JOIN tblKalenderType ON tblKalenderpunt.typeId = tblKalenderType.typeId WHERE tblKalenderpunt.dagId = 139
 
Hipska BE

Hipska BE

30/07/2010 11:36:14
Quote Anchor link
Doet die query nu wat je verlangde?

2 opmerkingen:
1) * ? laat gewoon die velden zoals het voordien was
2) waarom haakje rond tabellen?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
  veld1,
  veld2
FROM tblKalenderpunt
LEFT JOIN
  tblWerknemers
ON
  tblKalenderpunt.werknemerId = tblWerknemers.werknemerId
LEFT JOIN tblKalenderType
ON
  tblKalenderpunt.typeId = tblKalenderType.typeId
WHERE
  tblKalenderpunt.dagId = 139
 
Moe BE

Moe BE

30/07/2010 13:49:23
Quote Anchor link
@Hipska: hij doet nu helemaal wat ik verlangde

Zonder de haakjes werd mijn query niet uitgevoerd.
 
Hipska BE

Hipska BE

30/07/2010 14:58:35
Quote Anchor link
Dat is vreemd...

Dus zoals ik hem plaatste doet hij het niet?
Wat geeft ie als foutmelding?
 
Moe BE

Moe BE

30/07/2010 15:13:52
Quote Anchor link
Ik weet niet meer juist wat hij als foutmelding gaf, maar het hij zei iets over een fout in het FROM gedeelte.

Mss ook even bijvermelden dat het hier over een access database gaat.
 
Hipska BE

Hipska BE

30/07/2010 15:18:11
Quote Anchor link
Ah, Access SQL ken ik niet zo goed, maar zou niet veel mogen afwijken van standaard SQL.

Waarom moet die tweede JOIN dan niet tussen haakjes vraag ik mij dan af.
 
Moe BE

Moe BE

30/07/2010 15:21:43
Quote Anchor link
Ik vind het er zo ook vreemd uit zien, maar had een voorbeeldje gevonden op het net en het werkt. Dus ik ben tevreden. (Moet jij trouwens niet aan het werk zijn?)
 



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.