Hey,

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 ...
Hey,

ik heb ...


<?
    $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?
Hier staat wel degelijk een fout in: de query die je daar geschreven hebt ken je helemaal niet toe aan een variabelen. Nu wordt het door php geïnterpreteerd als een combinatie van constanten en functies.

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:
<?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'];
}
?>

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.
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.



Hey,

ik heb deze aangepast de code is nu


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 ;


Maar hou krijg ik het nu voor elkaar??
Want het jaartal heb ik op zich niet nodig ...

Alvast bedankt,
Steven
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:

SELECT
    omschrijving
FROM
    jaarboek
WHERE
    datum = CURDATE()


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.
Hey,

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
Als je selecteert op datum, zal je alle gebeurtenissen krijgen die op die dag gebeuren.

Selecteren op datum is: WHERE datum_veld = CURDATE()
**steven** schreef op 13.11.2006 00:40
het klantennummer is een combinatie van letters en cijfers is een varchar dan niet beter??
Oke ja, dan hoort het inderdaad een varchar te zijn. Die mogelijkheid zag ik even over het hoofd.

Voor de rest, zie de post hierboven van Kalle.
`bedrag` varchar(255) NOT NULL,
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.

Ga je eens verdiepen in de verschillende datatypes, er bestaat meer dan alleen een VARCHAR.
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()



Hierbij lukt het niet ...
ik krijg maar 1 gebeurtenis ...




Frank schreef op 13.11.2006 01:49
`bedrag` varchar(255) NOT NULL,
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.

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
**steven** schreef op 13.11.2006 07:30
het bedrag stond al reeds in float ...

Gebruik een decimal. Die is betrouwbaarder bij berekeningen.

Reageren