terugkijken op een datum
Wat ik wil is dit van verschillende data zien en heb deze query opgezet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
SELECT gr1.date, (gr1.hoogte + gr2.hoogte) as hoogte
FROM (SELECT date, (hoogte * 3) AS hoogte
FROM metingen
GROUP BY date
) AS gr1
JOIN (
SELECT date, (hoogte * 2) AS hoogte
FROM metingen WHERE date = (gr1.date - INTERVAL 1 DAY)
GROUP BY date
) AS gr2 ON gr2.date = ( gr1.date - INTERVAL 1
DAY )
WHERE gr1.date
BETWEEN 2009-01-01
AND 2010-01-01
?>
SELECT gr1.date, (gr1.hoogte + gr2.hoogte) as hoogte
FROM (SELECT date, (hoogte * 3) AS hoogte
FROM metingen
GROUP BY date
) AS gr1
JOIN (
SELECT date, (hoogte * 2) AS hoogte
FROM metingen WHERE date = (gr1.date - INTERVAL 1 DAY)
GROUP BY date
) AS gr2 ON gr2.date = ( gr1.date - INTERVAL 1
DAY )
WHERE gr1.date
BETWEEN 2009-01-01
AND 2010-01-01
?>
Volgens mij zou hij op deze manier moeten werken maar als ik hem uitvoer krijg ik deze melding:
#1054 - Unknown column 'gr1.datum' in 'where clause'
De query werkt als ik de WHERE conditie weghaal dit gedeelte:
WHERE date = (gr1.date - INTERVAL 1 DAY)
Maar als ik dat weghaal duurt de query erg lang om uit te voeren omdat hij de hele table joined. En misschien pas ik de query later aan zodat hij terug gaat kijken op 7 dagen maar ja dan duurt de query helemaal 3 jaar om uit te voeren.
Ik zit hier echt vast mee dus kan iemand mij hiermee helpen?
Hoewel ik het nergens in je code zie, heb je ergens gr1.datum in je code staan. Dat klopt niet.
#1054 - Unknown column 'gr1.date' in 'where clause'
Je kan twee dingen doen, of je kolom naam aanpassen (naar bijvoorbeeld datum) of in deze query backticks (`) gebruiken om date. Dat laatste is niet aan te raden, omdat je database opzet verkeerd is. Maar als het eerste niet kan, is dat laatste je redding. :-)
Toevoeging op 11/11/2010 12:06:03:
Toevoeging: Wordt dus `gr1.date` e.d.
Chris Horeweg op 11/11/2010 12:05:24:
Dat komt omdat je "date" als kolom naam heb gebruikt. Date is een voorbehouden functie in MySQL.
Je kan twee dingen doen, of je kolom naam aanpassen (naar bijvoorbeeld datum) of in deze query backticks (`) gebruiken om date. Dat laatste is niet aan te raden, omdat je database opzet verkeerd is. Maar als het eerste niet kan, is dat laatste je redding. :-)
Toevoeging op 11/11/2010 12:06:03:
Toevoeging: Wordt dus `gr1.date` e.d.
Je kan twee dingen doen, of je kolom naam aanpassen (naar bijvoorbeeld datum) of in deze query backticks (`) gebruiken om date. Dat laatste is niet aan te raden, omdat je database opzet verkeerd is. Maar als het eerste niet kan, is dat laatste je redding. :-)
Toevoeging op 11/11/2010 12:06:03:
Toevoeging: Wordt dus `gr1.date` e.d.
Ah das een goeie ik zal als ik terug bij me computer ben (met de DB erop) even de kolomnaam veranderen, dat zou niet uit moeten maken.
Ok heb de kolomnaam date veranderd naar datum en de query ziet er dan alsvolgt uit
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
SELECT gr1.datum, (gr1.hoogte + gr2.hoogte) as hoogte
FROM (SELECT datum, (hoogte * 3) AS hoogte
FROM metingen
GROUP BY datum
) AS gr1
JOIN (
SELECT datum, (hoogte * 2) AS hoogte
FROM metingen WHERE datum = (gr1.datum - INTERVAL 1 DAY)
GROUP BY datum
) AS gr2 ON gr2.datum = ( gr1.datum - INTERVAL 1
DAY )
WHERE gr1.datum
BETWEEN 2009-01-01
AND 2010-01-01
?>
SELECT gr1.datum, (gr1.hoogte + gr2.hoogte) as hoogte
FROM (SELECT datum, (hoogte * 3) AS hoogte
FROM metingen
GROUP BY datum
) AS gr1
JOIN (
SELECT datum, (hoogte * 2) AS hoogte
FROM metingen WHERE datum = (gr1.datum - INTERVAL 1 DAY)
GROUP BY datum
) AS gr2 ON gr2.datum = ( gr1.datum - INTERVAL 1
DAY )
WHERE gr1.datum
BETWEEN 2009-01-01
AND 2010-01-01
?>
Ik krijg alleen nog steeds exact dezelfde foutmelding:
#1054 - Unknown column 'gr1.datum' in 'where clause'
Gewijzigd op 11/11/2010 14:35:12 door task b