PHP.EE FOORUM   
Nimi:   Pass:   Mäleta mind! 
   Teemad | php.ee esilehele | registreeri | Märgi kõik teemad loetuks | #php.ee Skype vestlus | RSS
UUS TEEMA  OTSI  Lehekülgi: 1
Ajavahemik
Postitaja: joker 2011-05-31 12:48:41
Väljad:
<input id="start_date" name="start_date" value="" autocomplete="off" size="10" maxlength="10" type="text" ref="db"> - <input id="end_date" name="end_date" value="" autocomplete="off" size="10" maxlength="10" type="text" ref="db">

Päring:
$sql = "SELECT * FROM TABEL WHERE add_date BETWEEN ".date('Y-m-d', strtotime($start_date))." AND ".date('Y-m-d', strtotime($end_date));

Variant:
Variant A. Kasutaja jätab start_date tühjaks. Sel juhul peaks päring andma aegade algusest kuni $end_date kuupäevani.

Variant B. Kasutaja jätab end_date tühjaks. Sel juhul peaks päring andma $start_date kuni aegade lõpuni.

Probleem:
Kuidas variant A ja B puhul peaks päring välja nägema?!

Viimati muudetud: 31-05-2011 12:49:16
Muutja: joker
Põhjus:

RE: Ajavahemik
Postitaja: joker 2011-05-31 13:06:54
Lahendasin hetkel küll asja natuke ebaintelligentselt:

if (!empty($start_date) || !empty($end_date))
{
$start_date = (empty($start_date))
? '1900-01-01'
: date('Y-m-d', strtotime($start_date));

$end_date = (empty($end_date))
? '3999-01-01'
: date('Y-m-d', strtotime($end_date));

$sql .= " WHERE add_date BETWEEN $start_date AND $end_date";
}

Viimati muudetud: 31-05-2011 13:08:33
Muutja: joker
Põhjus:

RE: Ajavahemik
Postitaja: blaa 2011-05-31 14:23:44
kui sa paned selle 1970 ja 3999 sisse, siis kontrollitakse iga päringu korral kahte tingimust, mis ei ole ju vajalik.
Ma teeks nii, see annab võimaluse ka muid filtreid kergesti lisada:


PHP kood:
 
$where 
= array();
if (
$t strtotime($start_date))
{
  
$where[] = 'add_date=< '.date('Y-m-d'$t);
}
if (
$t strtotime($end_date))
{
  
$where[] = 'add_date>= '.date('Y-m-d'$t);
}

$sql "SELECT * FROM TABEL ".(count($where) ? (' WHERE '.implode(','$where)) : '');
RE: Ajavahemik
Postitaja: pohhui 2011-05-31 14:26:42
Vihje:

WHERE DATEFILELD BETWEEN DATE_A AND DATE_B

on sama, mis

WHERE DATEFILELD >= DATE_A AND DATEFILELD <= DATE_B

Leheküljed: 1

©2002-2013 Martin Rebane & PHP.ee kaasautorid
  0.0785319805145