Regels uit database halen die tussen 2 datums zitten

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jochanan V

Jochanan V

04/10/2010 22:25:43
Quote Anchor link
Dag mensen,

ik heb weers een vraagje omtrent een script waarmee ik wil laten zien wie de komende week scheidsrechter is bij een wedstrijd. (http://uttop.nl/index.php?p=content/scheidsrechtersch)

Via de link hierboven zie je het hele schema. Nu wil ik alleen die datums laten zien die de komende week zijn. Het nadeel is dat ik de datums in database in varchar heb staan. (vb: 5-10-2010)

Nu kan ik de id's ophalen en aan hand daarvan de regels ophalen dmv:
$result_id_vandaag =mysql_fetch_assoc(mysql_query("SELECT ssid, datum FROM scheidsrechtersch WHERE datum = '$datum_vandaag'"));
$result_id_week_later = mysql_fetch_assoc(mysql_query("SELECT ssid, datum FROM scheidsrechtersch WHERE datum = '$datum_week_later'"));

Hierbij is de uitkomst van $result_id_vandaag bijv. ssid:10, datum:4-10-2010
en is de uitkomst van $result_id_week_later bijv. ssid:14, datum:11-10-2010

Maar helaas staat niet elke dag in de database, dus werkt bovenstaande code niet elke dag, alleen op de dagen dat beide dagen voorkomen in database.

Doe ik te moeilijk, of is hier wat mee te doen om het toch goed te laten zien?
 
PHP hulp

PHP hulp

23/04/2024 19:49:25
 
- SanThe -

- SanThe -

04/10/2010 23:00:28
Quote Anchor link
Jochanan V op 04/10/2010 22:25:43:
Het nadeel is dat ik de datums in database in varchar heb staan. (vb: 5-10-2010)


Ga dat eerst maar corrigeren. Met een datum in een varchar kan je helemaal niks.
 
Robert Deiman

Robert Deiman

04/10/2010 23:16:26
Quote Anchor link
Het moeilijke wat je doet is datums opslaan als Varchar, daar kan (My)SQL niet goed mee overweg, om te rekenen. Wat je kan doen is eerst een kolom 'sqldate' toe te voegen in je tabel, met wel als eigenschap een datum en dan een scriptje laten lopen in PHP:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
$sql_result
= mysql_query('SELECT * FROM scheidsrechtersch');
while($row = mysql_fetch_assoc($sql_result))
{

    $sqldate = date( 'Y-m-d', strtotime( $row['datum'] ) );
    $update = mysql_query('UPDATE scheidsrechtersch SET datum = \'' . $sqldate . '\' WHERE ssid = '.$row['ssid']
}

?>


Vervolgens heb je alles als datum in je database staan. Hoezee! Dat moet ook, want dan kan je SQL laten rekenen.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
SELECT *,
    DATE_FORMAT(datum, '%d-%m-%Y') AS datum_nl
FROM
    scheidsrechtersch
WHERE
    datum
BETWEEN
    CURDATE()
AND
    CURDATE() + INTERVAL 1 WEEK


Zoiets (uit mijn hoofd) zou het moeten worden, dan regel je het zoals het hoort: In je database.
Zie ook de DATE_FORMAT functie die ik gebruikte. Je hebt nu een virtuele kolom, 'datum_nl' waarin de datum in het formaat staat wat jij nu op slaat in de database.
 

04/10/2010 23:34:51
Quote Anchor link
Robert Deiman op 04/10/2010 23:16:26:
Het moeilijke wat je doet is datums opslaan als Varchar, daar kan (My)SQL niet goed mee overweg, om te rekenen. (...)


Geen enkele database kan daar goed mee overweg. Data en tijd horen altijd in de juiste type worden opgeslagen. Ook al is data en tijd niet echt vast gelegd in ANSI SQL heeft iedere database engine wel z'n eigen types daarvoor.
 
Jochanan V

Jochanan V

04/10/2010 23:46:01
Quote Anchor link
hmm... ben maar toch meteen aan de slag gegaan zoals jullie zeiden, de datum in een goede type te zetten. Dus staat nu als date. Had al wel zitten knoeien met het rekenen tussen datums, maar dat werkte niet met datum in varchar natuurlijk. Volgende werkt dus nu wel met de datum in date vorm.

$datum_vandaag = date("Y-m-d");
$datum_week_later = mktime(0, 0, 0, date("m"), date("d")+7, date("Y"));
$datum_week_later = date("Y-m-d", $datum_week_later);
$result_id_nu_en_week_later = mysql_query("SELECT ssid, datum FROM scheidsrechtersch WHERE datum BETWEEN '$datum_vandaag' AND '$datum_week_later'");

Al heb ik uiteindelijk het stukje van Robert gebruikt, wat natuurlijk nog even makkelijker is :) Hartstikke bedankt.. Het kan zo simpel... :)
 

04/10/2010 23:47:18
Quote Anchor link
Gebruik gewoon mysql's eigen functies.
 
Wim E

Wim E

05/10/2010 00:32:38
Quote Anchor link
of gebruik unix timestamp en ga werken met time...:)
 
Robert Deiman

Robert Deiman

05/10/2010 09:14:56
Quote Anchor link
Karl Karl op 04/10/2010 23:47:18:
Gebruik gewoon mysql's eigen functies.


Hij geeft aan uiteindelijk "mijn stukje" te hebben gebruikt. Dat werkte veel gemakkelijker. En je raad het al: Ik gebruik wel mysqls' eigen functies. :)
 

05/10/2010 09:18:41
Quote Anchor link
Robert Deiman op 05/10/2010 09:14:56:
Karl Karl op 04/10/2010 23:47:18:
Gebruik gewoon mysql's eigen functies.


Hij geeft aan uiteindelijk "mijn stukje" te hebben gebruikt. Dat werkte veel gemakkelijker. En je raad het al: Ik gebruik wel mysqls' eigen functies. :)


Zie eens effe zijn post boven mijn post. Daar doet ie het dus niet.
Tegen jou heb ik geen commentaar :-).
 
Robert Deiman

Robert Deiman

05/10/2010 09:39:26
Quote Anchor link
Daar heb ik het ook over: Hij zegt dat hij uiteindelijk mijn code heeft gebruikt omdat hij dat toch makkelijker vond. Dus hij gebruikt uiteindelijk niet zijn eigen geprutste code. :)
 
Thomas de Roo

Thomas de Roo

08/10/2010 20:23:48
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?php
function upcomingBirthdays(){
$q = mysql_query("select id, birth_month, birth_day
from par_users
where birth_day between DAY(NOW()) and DAY(NOW()) + 10 AND birth_month = MONTH(NOW()) ORDER BY birth_day DESC"
);
$arr = array();
while($row = mysql_fetch_object($q))
{

if(date("d-m") == $row->birth_day.'-'.$row->birth_month or date("j-m") == $row->birth_day.'-'.$row->birth_month)
{

    $u = userInfo($row->id);
    $age = $u['age'];
    $bold1 = "<img src='include/today.png' /> <span style='font-weight: bolder;font-size: 15px;text-decoration:underline;'>";
    $bold2 = "</span>";
}

else
{
    $u = userInfo($row->id);
    $age = $u['age'] + 1;
    $bold1 = "";
    $bold2 = "";
}

$arr[] =  "<a href='index.php?page=profile&id=".$row->id."'>".$bold1.userName($row->id).$bold2." (".$age.")</a>";
}

return $arr;
}

?>


Een functie die gebruik.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.