offtopic:
Had wat moeite om onderstaande situatie uit te leggen, dus succes met het `puzzelen` als u daar niet door afgeschrokken bent...
Had wat moeite om onderstaande situatie uit te leggen, dus succes met het `puzzelen` als u daar niet door afgeschrokken bent...
Ik heb een aardig complexe relationele database. Om het probleem te begrijpen zal ik even uitleggen welke data ik aan het selecteren ben;
- In eerste instantie zijn dit onderdelen (uit de tabel ap_ond_archief) uit het archief.
- Deze onderdelen zijn gerelateerd aan orginele onderdelen (uit de tabel ap_onderdelen) en ook daarvan hebben we enkele columns nodig.
- Deze onderdelen zijn op hun beurt gerelateerd aan een leverancier (uit de tabel ap_leveranciers) en ook daarvan hebben we enkele columns nodig.
Dit gaat allemaal prima; geen enkel probleem.
Totdat ik wat diepergaande informatie (columns) nodig heb.
Eerst even kort samengevat wat ik momenteel aan het selecteren ben:
Onderdelen uit het archief.
Deze onderdelen zijn gerelateerd aan een tekening uit het archief (deze relaties zijn vastgelegd in de tabel ap_relaties_tekarch_ondarch).
Dan komt het probleem; deze tekening (uit het archief) is op zijn beurt gerelateerd aan een subproject en dit subproject heeft een column genaamd `lev_datum_bevestigd`. En díe datum, die moet aan bepaalde voorwaarden voldoen. En dat levert het probleem op. Deze query werkt uitstekend:
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
| SELECT
ondarch.org_ond_id AS ond_id,
lev.lev_id,
lev.lev_naam,
ondarch.aantal_nodig,
ondarch.aantal_gebruikt,
ond.voorraad,
ond.omschrijving,
ond.lev_nummer
FROM
ap_ond_archief AS ondarch
LEFT JOIN
ap_onderdelen AS ond
ON
(ondarch.org_ond_id = ond.ond_id)
LEFT JOIN
ap_leveranciers AS lev
ON
(ond.lev_id = lev.lev_id)
LEFT JOIN
ap_relaties_tekarch_ondarch AS reltekondarch
ON
(ondarch.ond_arch_id = reltekondarch.ond_arch_id)
LEFT JOIN
ap_subprojecten AS subpr
ON
(reltekondarch.tek_arch_id = subpr.tek_arch_id)
WHERE
ondarch.aantal_gebruikt < ondarch.aantal_nodig
ORDER BY
lev.lev_naam ASC |
Met bovenstaande query selecteer ik dus dat met de volgende relatie-structuur:
onderdelen > tekening > subproject (resultaat: koppeling met subproject).
Ik kan nu, dit levert geen probleem op, columns slecteren uit de tabel ap_subprojecten. Máár. Als ik vervolgens - iets wat mijn doel is - de datum aan bepaalde voorwaarden wil laten voldoen, dan loopt de database vast. Hij loopt bijvoorbeeld vast door de WHERE clausule uit te breiden naar:
code:
1
2
3
4
| WHERE
ondarch.aantal_gebruikt < ondarch.aantal_nodig
AND
subpr.lev_datum_bevestigd != '0000-00-00' |
Snapt iemand hoe dit komt?! Ik vind het namelijk vreemd dat ik wel data kan selecteren uit de subprojecten-tabel, maar er geen voorwaarden aan kan koppelen.
Ik vermoed dat er iets mis gaat met - of de manier van JOIN-en, of de manier van sorteren (ORDER BY moet misschien een GROUP BY worden).
[ Voor 4% gewijzigd door Verwijderd op 25-08-2005 09:59 ]