PDA

Volledige versie bekijken : Ingewikkelde MySQL join query werkt niet


zuyp
%Europe/Berlin %975 %2007, 00:24
Ik heb een query gemaakt om bepaalde producten die uit een factuur komen uit een database te halen. De factuur moet tussen een bepaalde datum liggen, en een bepaalde status hebben, en de klant die bij de factuur hoort moet in Nederland gevestigd zijn.

Zo ziet de query er uit.

SELECT easyfact_factuurelementen.bedrag AS bedrag, easyfact_factuurelementen.aantal AS aantal
FROM easyfact_factuurelementen
INNER JOIN easyfact_factuur ON easyfact_factuurelementen.factuurnr = easyfact_factuur.factuurnr
INNER JOIN easyfact_relatie ON easyfact_factuur.klantcode = easyfact_relatie.klantcode
WHERE easyfact_factuur.factuurdatum >= '2007-06-01' AND easyfact_factuur.factuurdatum <= '2007-06-31' AND easyfact_relatie.bedrijfsland = 'NL' AND easyfact_factuurelementen.btw = '1.19'

De query werkt op zich goed alleen het gedeelte achter het WHERE statement AND easyfact_factuurelementen.btw = '1.19' word niet goed gepakt terwijl deze kolom toch wel degelijk bestaat in de tabel factuurelementen, en er ook data in deze kolom staat. Ik doe waarschijnlijk wat fout na het WHERE statement, maar ik kom er maar niet achter wat. Kan iemand mij misschien verder helpen?

zuyp
%Europe/Berlin %999 %2007, 00:59
Laat maar! Ik heb het al op een andere manier opgelost!

De Kale
%Europe/Berlin %358 %2007, 09:36
klinkt in mijn oren in ieder geval direct als een LEFT JOIN probleem...
in de joins zul je waarschijnlijk je resultset al beperken waarbij je in een latere join de data die je dus wilt hebben niet meer op kunt halen. Dit voorkom je met een LEFT JOIN

zuyp
%Europe/Berlin %409 %2007, 10:49
Nee, dat was het probleem niet. Ik zat in mijn verdere PHP code gewoon wat te eikelen. (nachtwerk sucks)

gbolssens
%Europe/Berlin %496 %2007, 12:55
SELECT easyfact_factuurelementen.bedrag AS bedrag, easyfact_factuurelementen.aantal AS aantal
FROM easyfact_factuurelementen
INNER JOIN easyfact_factuur ON easyfact_factuurelementen.factuurnr = easyfact_factuur.factuurnr
INNER JOIN easyfact_relatie ON easyfact_factuur.klantcode = easyfact_relatie.klantcode
WHERE easyfact_factuur.factuurdatum >= '2007-06-01'
AND easyfact_factuur.factuurdatum <= '2007-06-31'
AND easyfact_relatie.bedrijfsland = 'NL'
AND easyfact_factuurelementen.btw = '1.19'


Wat ik meetal doe is mijn tabelnamen aliassen met 'AS', niet m'n veldnamen; tenzij ik bvb 2 velden 'naam' uit 2 verschillende tabellen ga SELECT'en.

Dat schrijft wel lekker kort; Kijk maar eens naar wat dat met jouw query doet :

SELECT bedrag, aantal
FROM easyfact_factuurelementen AS efe
INNER JOIN easyfact_factuur AS ef ON efe.factuurnr = ef.factuurnr
INNER JOIN easyfact_relatie AS er ON ef.klantcode = er.klantcode
WHERE ef.factuurdatum >= '2007-06-01'
AND ef.factuurdatum <= '2007-06-31'
AND er.bedrijfsland = 'NL'
AND efe.btw = '1.19'

scheelt he :)

greetz,
GB

zuyp
%Europe/Berlin %528 %2007, 13:41
Ja, maar zo verlies je ook snel het overzicht tussen 1000e regels code en +-7 querys. Daarom blijf ik het voluit schrijven.

gbolssens
%Europe/Berlin %534 %2007, 13:50
Ik alias ze net om het overzicht te bewaren maar ieder heeft daar zijn eigen manier in. Da's het leuke aan programmeren, als je aan 10 mensen vraagt een applicatie te schrijven, dan zie je ook 10 verschillende oplossingen. De ene zal misschien efficiënter of sneller of veiliger zijn dan de andere, maar als iedereen de originele opdracht volgt heb je wel 10 programma's die hetzelfde doen, alleen 10x op een andere manier.

Is mss meer een topic voor de koffie-lounge, maar soit :p

greetz,
GB