我在下面看到了表“约会”。
任命
id | app_date(日期)| app_price(整数)
1 | 2013-08-21 | 45个
2 | 2012-07-01 | 30个
3 | 2013-08-11 | 50个
...... ...... ....
我创建了两个下拉选项,一个是多年(例如2011,2012,2013,...),一个是月(一月,二月......)。 如果用户选择“1月”,则查询值为“01”,2月为“02”.... 12月为“12”。 我希望用户在选择年份和月份之后“提交”,然后接收约会的结果。
我写了你看到的代码。
$year=$_GET['year']; //e.g. 2013
$month=$_GET['month']; //e.g. 08
if ($_GET['stat']==true) {
$con = pg_connect("host=localhost dbname=appdb user=postgres password=111")
or die('Could not connect: ' . pg_last_error());
$query="select app_date, app_price
from appointment
where TO_CHAR(app_date, 'YYYY')='$year' AND TO_CHAR(app_date, 'MM')='$month' ";
$result=pg_query($query);
echo "<table align='center' width='20%' border='1'>
<th>".$month."</th>";
while ($row=pg_fetch_array($result))
{
$sum=$sum+$row['app_price'];
$sum_app=$sum_app+1;
}
echo "<tr><td>TOTAL APPOINTMENTS:</td><td>".$sum_app."</td><tr>
<tr><td>TOTAL PRICE:</td><td>".$sum."</td><tr>";
}
?>
提交后我没有结果。我认为变量$ year ='2013'和$ month ='08'不是与“date”数据类型相等的正确值类型。我应该如何平衡它?
提前谢谢大家。
答案 0 :(得分:1)
如果您在字段app_date
上有索引,则会将其忽略,并扫描整个表格。更好的例子是使用比较运算符,例如 BETWEEN
:
$dt = new DateTime("$year-$month-1");
$sql = "
SELECT app_date, app_price
FROM appointment
WHERE app_date BETWEEN '{$dt->format('Y-m-d')}' AND '{$dt->format('Y-m-t')}'
";
<强> Demonstration 强>