Ik weet niet of dit de juiste plek is om met deze vraag te komen, anders sorry mods, verplaats mijn bericht dan aub!:)

Nu mijn probleem: Ik heb een databasetabel met de volgende kolommen;
id,datum1,datum2,naam,datumaanvraag,status,commentaar,admincommentaar.
Kolom id geeft een unieke id aan iedere aanvraag.
datum1 geeft begindatum aan,
datum2 einddatum.
naam bevat de naam van de persoon die de aanvraag heeft geplaatst.
datumaanvraag is de datum dat de aanvraag is geplaatst.
Status of de aanvraag al is geaccepteerd ja/nee.
commentaar bevat commentaar van degene die de aanvraag instuurt,
admincommentaar bevat commentaar van de admin op de aanvraag.

Nu wil ik een tabel maken met bovenaan de datums van 1 maand/ 1 week. Aan de zijkant de namen van alle mensen. Als een aanvraag van datum1 t/m datum2 bij een persoon in een week valt wil ik daar in de tabel kruisjes hebben. Zie hier een voorbeeld: http://i.imgur.com/pSSYEyz.png (de rode kruisjes in het plaatje geven bijvoorbeeld aan als de datum in de bovenste rij matcht met de datum van een aanvraag bij die persoon.)

Ik weet alleen niet hoe ik dit moet aanpakken. Om een array te krijgen van alle datums tussen datum1 en datum2 heb ik wel dit gevonden:

<?php
/**
 * creating between two date
 * @param string since
 * @param string until
 * @param string step
 * @param string date format
 * @return array
 * @author Ali OYGUR <[email protected]>
 */
function dateRange($first, $last, $step = '+1 day', $format = 'd/m/Y' ) { 

    $dates = array();
    $current = strtotime($first);
    $last = strtotime($last);

    while( $current <= $last ) { 

        $dates[] = date($format, $current);
        $current = strtotime($step, $current);
    }

    return $dates;
}
//toon periode in array
print_r(dateRange($datum1, $datum2));
}
?>

Voorbeeld: datum1=2013-08-14 en datum2=2013-08-23
Dan krijg ik als output:
Array ( [0] => 14/08/2013 [1] => 15/08/2013 [2] => 16/08/2013 [3] => 17/08/2013 [4] => 18/08/2013 [5] => 19/08/2013 [6] => 20/08/2013 [7] => 21/08/2013 [8] => 22/08/2013 [9] => 23/08/2013 )

Nu de tabel nog, maar ik weet niet hoe ik dat precies moet gaan aanpakken.
Ik hoop dat ik mijn probleem goed heb omschreven?
Kan iemand mij alsjeblieft op weg helpen? Alle tips zijn meer dan welkom!:)
en waar komt dan die datum vandaan Davey? komt die uit de database of bereken je dat met php? laat even een klein stukje code zien aub
Script is zelfde als die ik laatst heb gepost, zie:

<?php
define('INCLUDE_CHECK',true);

require 'inc/connect.php';

$query1="
SELECT
    m.id, 
    m.voornaam, 
    m.achternaam,
    d.check_date, 
    IF(f.memberid IS NULL, '-', 'X') dayoff 
FROM
    (SELECT 
        @startdate + INTERVAL (@pos := @pos + 1) DAY check_date
    FROM
        members,
        (SELECT @pos := -1,
        @startdate := '2013-08-01') a
    LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
    verlofaanvragen f
    ON m.id = f.memberid
    AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";

$sqltitel = mysql_query($query1) or die(mysql_error());  
$member = 0; //dit is de pointer om bij te houden met welk lid we werken 
$tr = '<tr>';
$tbody = ''; //voor de rijen van de tabel     
?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>kalender</title>
<style>
table { border-collapse:collapse; }
td, th { border: 1px solid black; width:50px; text-align:center; }
</style>
</head>
<body>
<?php 
echo '<h1><img src="/img/titel/Info.png" />Kalender</h1><hr>';
echo '<p>Kalender weergave van geaccepteerde verlofaanvragen</p>';
echo '<table border="1" cellpadding="5"><tr><th colspan="32">Augustus</th>';
while ($row = mysql_fetch_assoc($sqltitel)) {
    //controleer of het een ander lid is
    if ($row['id'] !== $member) {        
        $tbody .= $tr . '<td>' . $row['voornaam'] . ' ' . $row['achternaam'] . '</td>';
        $member = $row['id'];
        $tr = '</tr><tr>';
        $thead = '<tr><td>&nbsp;</td>'; //de head voor de titels
    }
    $thead .= '<td>' . $row['check_date'] . '</td>';
    $tbody .= '<td>' . $row['dayoff'] . '</td>';
}
echo $thead . '</tr>';
echo $tbody . '</tr>';    
echo '</table>';
?>
</body>
</html>

Dus via $row['check_date'] krijg ik nu de datums.
Let op dat de checkdate een kolom is uit een derived table, je kan daar dus alle beschikbare datetime functies op uitvoeren (ook MySQL is nog wel eens lief voor de progammeurs)
Davey zie voor de mysql date functions bijvoorbeeld: http://www.w3schools.com/sql/func_date_format.asp

voorbeeldje dat de dag van de maand en de afgekorte naam van de dag van de week toont:

SELECT DATE_FORMAT(NOW(),'%a %e') AS datetext



en met de query
SET lc_time_names = 'nl_NL';
zet je hem om naar de nederlandse taal

in jouw query verweven:


SET lc_time_names = 'nl_NL';
SELECT
    m.id, 
    m.voornaam, 
    m.achternaam,
    DATE_FORMAT(d.check_date, '%a %e') AS datetext,
    IF(f.memberid IS NULL, '-', 'X') dayoff 
FROM
    (SELECT 
        @startdate + INTERVAL (@pos := @pos + 1) DAY check_date
    FROM
        members,
        (SELECT @pos := -1,
        @startdate := '2013-08-01') a
    LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
    verlofaanvragen f
    ON m.id = f.memberid
    AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
Wist helemaal niet dat dat bestond! Bedankt voor de link Frank!

Als ik de query in phpmyadmin invoer krijg ik een veelbelovend resultaat, echter in php krijg ik de volgende error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT m.id, m.voornaam, m.achternaam, DATE_FORMAT(d.check_dat' at line 2

----edit:
Als ik SET lc_time_names = 'nl_NL'; in de query hou staan krijg ik bovenstaande error.

Om dit op te lossen doe ik nu:
mysql_query("SET lc_time_names = 'nl_NL';");
$query1="
SELECT
    m.id, 
    m.voornaam, 
    m.achternaam,
    DATE_FORMAT(d.check_date, '%a %e') AS datetext,
    IF(f.memberid IS NULL, '-', 'X') dayoff 
FROM
    (SELECT 
        @startdate + INTERVAL (@pos := @pos + 1) DAY check_date
    FROM
        members,
        (SELECT @pos := -1,
        @startdate := '2013-08-01') a
    LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
    verlofgeaccepteerd f
    ON m.id = f.memberid
    AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE m.functie1 = 'Algemeen'
$sqltitel = mysql_query($query1) or die(mysql_error());


Is dit de juiste manier om dit aan te pakken? Of is er een betere manier?
In ieder geval heel veel dank zowel Frank als Ger voor de hulp! Heb veel bij geleerd en genoeg leesvoer om nog eens aandachtig door te nemen!:)
Eigenlijk kan je sowieso beter mysqli gebruiken, en daarmee kan je meerdere queries in één keer uitvoeren.
Lees meer ...
Ik ben weer even aan het stoeien omdat ik de kalender wat overzichtelijker wil maken. Alle doordeweekse dagen hoeven namelijk niet getoond te worden.
Ik wil nu enkel alle vrijdagen, zaterdagen en zondagen van een maand tonen. Ik dacht door het toevoegen van WHERE datetext LIKE 'vr%' OR datetext LIKE 'za%' OR datetext LIKE 'zo%'.
Maar dit werkt niet, omdat datetext niet bestaat volgens de foutmelding. Maar ik wil de datetext uitlezen die ik op regel 7 heb van onderstaand script:

mysql_query("SET lc_time_names = 'nl_NL';");
$query1="
SELECT
    m.id, 
    m.voornaam, 
    m.achternaam,
    DATE_FORMAT(d.check_date, '%a %e') AS datetext,
    IF(f.memberid IS NULL, '-', 'X') dayoff 
FROM
    (SELECT 
        @startdate + INTERVAL (@pos := @pos + 1) DAY check_date
    FROM
        members,
        (SELECT @pos := -1,
        @startdate := '2013-08-01') a
    LIMIT 31) d
CROSS JOIN members m
LEFT JOIN
    verlofgeaccepteerd f
    ON m.id = f.memberid
    AND d.check_date BETWEEN f.datum1 AND f.datum2
ORDER BY m.voornaam, m.id, d.check_date";
//WHERE datetext LIKE 'vr%' OR datetext LIKE 'za%' OR datetext LIKE 'zo%'
$sqltitel = mysql_query($query1) or die(mysql_error());


Je kunt geen alias in een where clause gebruiken (dit geldt niet voor een alias in een subquery, die mag wel in de where van de hoofdquery).

....
WHERE WEEKDAY(d.checkdate) BETWEEN 4 AND 6

(Maandag is 0, zondag is 6)
Bedankt Ger!
Respect voor jouw kennis van sql!

Ik kan op google zo 123 niks vinden over 'WEEKDAY', waar zou ik daar meer informatie over kunnen vinden?

Bedankt iig! De query werkt zoals ik wil!

Reageren