Dagen herkennen
Ik heb een database aangemaakt met dingen die ik op bepaalde dagen wil doen ...
Ik heb een tabel aangemaakt met de onderverdelingen: "dag", "maand", "gebeurtenis", ...
Ik wil dit laten uitvoeren door een cronjob die 's nachts draaid en zo 's nachts een e-mail naar mij stuurd wat ik moet doen ...
Maar nu mijn vraag ...
Ik weet hoe ik de datum van vandaag moet oproepen ...
Met date(d) en date(m)
Maar hou kan ik ervoor zorgen dat ik deze data ook uit mijn database kan halen ?? want ik heb ook sommige dagen wanneer ik meer als 1 ding moet doen ... (En dus ook meer als 1 mail krijg)
Alvast bedankt,
Steven
ps. Iedere gebeurtenis komt het jaar erachter terug en heeft een eigen id ...
Gewijzigd op 01/01/1970 01:00:00 door Steven dirickx
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Dus je vraagt de datum op met CURDATE().
De pagina spreekt voor de rest voor zichzelf.
Dus je vraagt de datum op met CURDATE().
De pagina spreekt voor de rest voor zichzelf.
Kalle schreef op 12.11.2006 02:57:
http://dev.mysql.com/doc/refman/4.1/en/date-and-time-functions.html
Dus je vraagt de datum op met CURDATE().
De pagina spreekt voor de rest voor zichzelf.
Dus je vraagt de datum op met CURDATE().
De pagina spreekt voor de rest voor zichzelf.
De datum opvragen was het probleem niet ...
dat kan ik ...
Maar ik snap niet hoe je die specifieke gebeurtenissen uit de database kan halen...
Mgv,
Steven
%e is voor een dag met het volgende formaat: 1-31
%d is voor 01-31
**steven** schreef op 12.11.2006 02:40:
Ik heb een tabel aangemaakt met de onderverdelingen: "dag", "maand", "gebeurtenis", ...
We moeten even precies weten hoe de structuur van je tabel eruit ziet voor we iets zinnigs kunnen zeggen.
CREATE TABLE `jaarboek` (
`dag` varchar(255) NOT NULL,
`maand` varchar(255) NOT NULL,
`id` float NOT NULL auto_increment,
`omschrijving` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;
Waarom sla je de datum niet op in een DATE, dan heb je ook een jaartal te pakken. Of je daar later wat mee gaat doen, mag je zelf weten. Die FLOAT verander je in een INT, dat lijkt mij wel zo logisch, zie hoofdstuk 11 van de MySQL-handleiding.
Met DAYOFMONTH() en MONTH() kun je simpel dagen en maanden uit een datum opvragen.
Frank schreef op 12.11.2006 14:41:
Dag en maand in een VARCHAR en het id in een FLOAT?
Waarom sla je de datum niet op in een DATE, dan heb je ook een jaartal te pakken. Of je daar later wat mee gaat doen, mag je zelf weten. Die FLOAT verander je in een INT, dat lijkt mij wel zo logisch, zie hoofdstuk 11 van de MySQL-handleiding.
Met DAYOFMONTH() en MONTH() kun je simpel dagen en maanden uit een datum opvragen.
Waarom sla je de datum niet op in een DATE, dan heb je ook een jaartal te pakken. Of je daar later wat mee gaat doen, mag je zelf weten. Die FLOAT verander je in een INT, dat lijkt mij wel zo logisch, zie hoofdstuk 11 van de MySQL-handleiding.
Met DAYOFMONTH() en MONTH() kun je simpel dagen en maanden uit een datum opvragen.
Hey,
de gebeurtenissen komen ieder jaar terug!
Maar ....
Hoe kan ik dat nu uit de database halen?
Mgv,
Steven
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
SELECT
omschrijving
FROM
jaarboek
WHERE
MONTH(datumkolom) = 11
AND
DAYOFMONTH(datumkolom) = 12
omschrijving
FROM
jaarboek
WHERE
MONTH(datumkolom) = 11
AND
DAYOFMONTH(datumkolom) = 12
De query om alle gebeurtenissen op 12 november op te halen. Zoals je ziet wordt het jaartal niet gebruikt in de vergelijking.
Frank schreef op 12.11.2006 15:51:
Thx! verder lukt het me wel :)
ik heb ...
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
$host = "localhost";
$user = "********";
$pass = "********";
$dbdb = "********";
if (!@mysql_select_db($dbdb, @mysql_connect($host, $user, $pass)))
{
}
else
{
SELECT
omschrijving
FROM
jaarboek
WHERE
maand = date(m)
AND
dag = date(d)
}
?>
$host = "localhost";
$user = "********";
$pass = "********";
$dbdb = "********";
if (!@mysql_select_db($dbdb, @mysql_connect($host, $user, $pass)))
{
}
else
{
SELECT
omschrijving
FROM
jaarboek
WHERE
maand = date(m)
AND
dag = date(d)
}
?>
Maar hoe kan ik er nu voor zorgen dat er iets kan uitgevoerd worden per gebeurtenis?
Alvast bedankt,
Steven
Ps. Hier staan toch geen fouten in?
Daarnaast gebruik je in je sql query een php functie waar je ook gewoon een mysql functie kunt gebruiken.
En tevens heb je nog niets aan je datamodel veranderd, je hebt nog steeds die 2 velden met dag en maand. Een datum of tijdstip sla je in een database op in een DATE of DATETIME veld, en niet in losse velden.
Maar goed, om je te laten zien hoe je iets uit een database kunt halen:
Code (php)
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$sql = "
SELECT
kolom1,
kolom2
FROM
tabel
WHERE
datumkolom = '2006-11-12'
";
if (!$res = mysql_query ($sql))
{
echo '<pre>';
trigger_error (mysql_errno() . ': ' . mysql_error());
echo $sql;
echo '</pre>';
}
else
{
$row = mysql_fetch_assoc($res);
echo $row['kolom1'].'<br />';
echo $row['kolom2'];
}
?>
$sql = "
SELECT
kolom1,
kolom2
FROM
tabel
WHERE
datumkolom = '2006-11-12'
";
if (!$res = mysql_query ($sql))
{
echo '<pre>';
trigger_error (mysql_errno() . ': ' . mysql_error());
echo $sql;
echo '</pre>';
}
else
{
$row = mysql_fetch_assoc($res);
echo $row['kolom1'].'<br />';
echo $row['kolom2'];
}
?>
In bovenstaand scriptje staat al heel veel:
- De juiste opmaak van een sql query.
- Foutafhandeling voor als de query mislukt.
- Uitvoering bij een gelukte query.
Dit is natuurlijk ook nog maar een voorbeeldje, maar hier moet je wel verder mee kunnen.
ps. Vergeet natuurlijk niet om eerst een verbinding met de database te maken.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Blanche schreef op 13.11.2006 00:03:
.
En tevens heb je nog niets aan je datamodel veranderd, je hebt nog steeds die 2 velden met dag en maand. Een datum of tijdstip sla je in een database op in een DATE of DATETIME veld, en niet in losse velden.
En tevens heb je nog niets aan je datamodel veranderd, je hebt nog steeds die 2 velden met dag en maand. Een datum of tijdstip sla je in een database op in een DATE of DATETIME veld, en niet in losse velden.
Hey,
ik heb deze aangepast de code is nu
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
CREATE TABLE `jaarboek` (
`datum` date NOT NULL,
`klantennummer` varchar(255) NOT NULL,
`naam` varchar(255) NOT NULL,
`id` int(11) NOT NULL auto_increment,
`bedrag` varchar(255) NOT NULL,
`omschrijving` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
`datum` date NOT NULL,
`klantennummer` varchar(255) NOT NULL,
`naam` varchar(255) NOT NULL,
`id` int(11) NOT NULL auto_increment,
`bedrag` varchar(255) NOT NULL,
`omschrijving` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=latin1 AUTO_INCREMENT=12 ;
Maar hou krijg ik het nu voor elkaar??
Want het jaartal heb ik op zich niet nodig ...
Alvast bedankt,
Steven
Quote:
ps. Iedere gebeurtenis komt het jaar erachter terug en heeft een eigen id ...
Kortom, iedere gebeurtenis heeft een eigen uniek ID en lijkt me dus ook een eigen datum. Als je de gebeurtenis van vandaag wilt hebben, kun je de volgende sql query gebruiken:
Wil je alle gebeurtenissen op een bepaalde datum door verschillende jaren heen selecteren, dus het jaar buiten beschouwing gelaten, dan zul je moeten selecteren op dag en maand. Kijk daarvoor eens naar de queries van Jan en Frank.
ps. Toch vind ik je datamodel nog niet netjes. Een klantnummer is ook gewoon een INT en geen VARCHAR. Een bedrag is een INT als je het over hele getallen hebt en anders een FLOAT of DECIMAL.
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
Ik heb de database weer wat aangepast enz ...
het klantennummer is een combinatie van letters en cijfers is een varchar dan niet beter??
Maar ik heb ook op somige dagen meerdere gebeurtennissen ... want hoe het nu is wordt alleen degene die het eerste ingevoerd is weergegeven ...
Alvast bedankt,
Steven
Selecteren op datum is: WHERE datum_veld = CURDATE()
**steven** schreef op 13.11.2006 00:40:
Oke ja, dan hoort het inderdaad een varchar te zijn. Die mogelijkheid zag ik even over het hoofd.het klantennummer is een combinatie van letters en cijfers is een varchar dan niet beter??
Voor de rest, zie de post hierboven van Kalle.
Quote:
Schrijf jij bedragen soms op als 'één euro en vijfentwintig eurocent' ? Daar geloof ik helemaal niets van! Dus, waar slaat dan die VARCHAR op? Helemaal nergens, je wilt namelijk helemaal geen stuk tekst opslaan, maar een getal met eventueel decimalen. Wanneer je hele getallen wilt opslaan, dan gebruik je INT (of een variant daar op) of een DECIMAL wanneer je ook decimalen wilt opslaan.`bedrag` varchar(255) NOT NULL,
Ga je eens verdiepen in de verschillende datatypes, er bestaat meer dan alleen een VARCHAR.
Gewijzigd op 01/01/1970 01:00:00 door Frank -
Kalle schreef op 13.11.2006 01:11:
Als je selecteert op datum, zal je alle gebeurtenissen krijgen die op die dag gebeuren.
Selecteren op datum is: WHERE datum_veld = CURDATE()
Selecteren op datum is: WHERE datum_veld = CURDATE()
Hierbij lukt het niet ...
ik krijg maar 1 gebeurtenis ...
Frank schreef op 13.11.2006 01:49:
Ga je eens verdiepen in de verschillende datatypes, er bestaat meer dan alleen een VARCHAR.
Quote:
Schrijf jij bedragen soms op als 'één euro en vijfentwintig eurocent' ? Daar geloof ik helemaal niets van! Dus, waar slaat dan die VARCHAR op? Helemaal nergens, je wilt namelijk helemaal geen stuk tekst opslaan, maar een getal met eventueel decimalen. Wanneer je hele getallen wilt opslaan, dan gebruik je INT (of een variant daar op) of een DECIMAL wanneer je ook decimalen wilt opslaan.`bedrag` varchar(255) NOT NULL,
Ga je eens verdiepen in de verschillende datatypes, er bestaat meer dan alleen een VARCHAR.
Hey,
het bedrag stond al reeds in float ...
Mgv,
Steven
Gewijzigd op 01/01/1970 01:00:00 door steven dirickx
**steven** schreef op 13.11.2006 07:30:
het bedrag stond al reeds in float ...
Gebruik een decimal. Die is betrouwbaarder bij berekeningen.