Is het mogelijk om een SQL opdracht te maken waarin ik de rows selecteer waar de huidige datum tussen de begin_datum en eind_datum in zit?

Ik heb een begin_datum veld en een eind_datum veld..

Zelf zat ik te denken aan zoiets:

SELECT * FROM tabel_naam WHERE "huidigedatum" >= "begin_datum" AND "huidigedatum" <= "eind_datum"

..waar "huidigedatum" met php moet worden aangemaakt. Maar ik weet niet of dit mogelijk is.
Ik heb nu dit:

$sql = "SELECT * FROM tasks WHERE NOW() >= 'tsk_start_date' AND WHERE NOW() <= 'tsk_end_date' ORDER BY tsk_end_date ASC";

En dat geeft deze error:

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 'WHERE NOW() <= 'tsk_end_date' ORDER BY tsk_end_date ASC' at line 1
huidige datum is: CURRENT_DATE

NOW() is huidige datum-tijd

Dat je die foutmelding krijgt is toch echt jouw eigen schuld. Wie gaat er nu tabel veldnamen quoten?!
Noppes Homeland op 19/12/2010 16:05:59

huidige datum is: CURRENT_DATE

NOW() is huidige datum-tijd


Och, mysql hakt het teveel gewoon d'r af.

Is je veld van het juiste type ? -> DATE.
Selecteer wat je wilt hebben.
Echo je query als die mis gaat.
Karl Karl, je bent aan het blaatschapen. Dat betekent dat je iets schrijft
wat totaal niet klopt.

NOW() zal zicht nooit laten verleiden om opeens "DATE" te zijn, tenzij je gaat casten naar date.
Afgezien daarvan: je schrijft in SQL niet 'AND WHERE', maar alleen 'AND', als er nog een conditie komt.
Noppes Homeland op 19/12/2010 16:32:26

Karl Karl, je bent aan het blaatschapen. Dat betekent dat je iets schrijft
wat totaal niet klopt.

NOW() zal zicht nooit laten verleiden om opeens "DATE" te zijn, tenzij je gaat casten naar date.


Ik ben het met je eens dat het eigenlijk niet helemaal correct is.
Ik maak hier gebruik van een smerig trucje, namelijk dat mysql het tijd gedeelte van de date afhakt. Verder is het zo dat mysql ook gewoon lekker leuk intern dates opslaat met tijden erbij.
Inderdaad is CURRENT_DATE() of equivalente functie netter. Mijn reactie was alleen ter illustratie dat hij in de docs kon vinden welke functie hij nodig had. Dat het iets in de trant van NOW() zou zijn.
Als je je queries netjes uitschrijft krijg je ook een duidelijkere foutmelding:

SELECT * 
FROM   tasks 
WHERE  NOW() >= 'tsk_start_date' 
AND WHERE NOW() <= 'tsk_end_date' 
ORDER BY 
       tsk_end_date ASC


dan komt er bij at line 4 te staan en dan kan je dus netjes zelf de regels aftellen
Ok ik heb hem soort van werkend nu:

$sql = "SELECT * FROM tasks WHERE tsk_start_date <= CURDATE() AND tsk_end_date >= CURDATE() ORDER BY tsk_end_date ASC";

Dit werkt en in phpmyadmin geeft hij alle juiste resultaten MAAR op mijn website niet helemaal. Hij laat alle rows behalve de laatst toegevoegde zien! Ik snap er helemaal niks van. Op andere pagina's gebruik ik eenzelfde soort code en laat hij alle resultaten zien, maar op deze is telkens de bovenste rij weg..
Ik heb het volgende staan:

<?php
$con = mysql_connect("localhost","...","...");
if (!$con) die('Could not connect: '.mysql_error());
mysql_select_db("planner", $con);

$sql = "SELECT * FROM tasks WHERE tsk_start_date <= CURDATE() AND tsk_end_date >= CURDATE() ORDER BY tsk_end_date ASC";
if (!mysql_query($sql,$con)) {
die('Error: '.mysql_error());
}
$resultaat = mysql_query($sql);

$aantal = mysql_num_rows($resultaat);
$verzamel = mysql_fetch_assoc($resultaat);

echo '<table><tr class=tr_all><td>ID</td><td>Titel</td><td>Beschrijving</td><td>Vak</td><td>Begindatum</td><td>Einddatum</td><td>Afgerond</td></tr>';
while($row = mysql_fetch_assoc($resultaat)){
echo '<tr>';
$nummer = $row['tsk_ID'];
$db_start_date=$row['tsk_start_date'];
$db_end_date=$row['tsk_end_date'];
echo '<td>'.$row['tsk_ID'].'</td>
<td>'.$row['tsk_title'].'</td>
<td>'.$row['tsk_txt'].'</td>
<td>'.$row['tsk_subj'].'</td>
<td>'.(date('d-m-Y', strtotime($db_start_date))).'</td>
<td>'.(date('d-m-Y', strtotime($db_end_date))).'</td>
<td>';
if($row['tsk_done']==1) {
echo 'Ja';
}
else {
echo 'Nee';
}
echo '</td>';
echo "<td><form action='bewerken.php' method='post'>
<input type='hidden' name='verstopt' value=$nummer>
<input type='image' name='submit' src='wijzig.png' style='outline: none;'></form></td>";
echo "<td><form action='verwijderen.php' method='post'>
<input type='hidden' name='verstopt' value=$nummer>
<input type='image' name='submit' src='verwijder.png' style='outline: none;'></form></td>";
echo '</tr>';
}
echo '</table>';
mysql_close($con);
?>
Volgens mij ben je er al vaker opgewezen:
- welk nut heeft het om te fetchen en er dan niets mee te doen en dan verderop dan vrolijk in een while hetzelfde resultaat verder te fetchen.

Blijkbaar steek je weinig op van hetgeen er gepost wordt.

Dus kiekt nog eens bij je andere topic welke opmerkingen over dit stuk script geschreven is!!

[size=xsmall]Toevoeging op 19/12/2010 17:31:43:[/size]

Volgens mij ben je er al vaker opgewezen:
- welk nut heeft het om te fetchen en er dan niets mee te doen en dan verderop dan vrolijk in een while hetzelfde resultaat verder te fetchen.

Blijkbaar steek je weinig op van hetgeen er gepost wordt.

Dus kiekt nog eens bij je andere topic welke opmerkingen over dit stuk script geschreven is!!

Reageren