我有2个输入框,我将在selDate下输入开始日期,在selDate2下输入结束日期。我的表将日期字段存储在文本字段中。
<form id="formDate" name="formDate" method="post" action="">
<p><strong>Date Filter:</strong></br>
</p>
<p>
<label for="selDate"></label>
<input type="text" name="selDate" id="selDate"
value="<?php echo $_POST['selDate']; ?>" />
</p>
<p>
<label for="selDate2"></label>
<input type="text" name="selDate2" id="selDate2"
value="<?php echo $_POST['selDate2']; ?>"/>
</p>
<p>
<input type="submit" name="go" id="go" value="Submit" />
</form>
我使用以下语句列出相应的行。
$varDate_Recordset1 = $row_RecordsetLastDate['date'];
if (isset($_POST['selDate'])) {
$varDate_Recordset1 = $_POST['selDate'];
}
$varDate2_Recordset1 = $row_RecordsetLastDate['date'];
if (isset($_POST['selDate2'])) {
$varDate2_Recordset1 = $_POST['selDate2'];
}
mysql_select_db($database_port, $port);
$query_Recordset1 = sprintf("SELECT * FROM checkout, `transaction`, school_store
WHERE `transaction`.activity_id=school_store.Tag
AND `transaction`.transaction_id=checkout.transaction_id AND (checkout.`date`
BETWEEN %s AND %s) AND `transaction`.status='1'
ORDER BY checkout.`date` DESC, `transaction`.id DESC",
GetSQLValueString($varDate_Recordset1, "text"),
GetSQLValueString($varDate2_Recordset1, "text"));
$Recordset1 = mysql_query($query_Recordset1, $port) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);
我在查询中使用BETWEEN这两个变量。输入日期时我回显空白行。我也尝试过结账。date
在过去(%s作为日期)和CAST(%s作为日期)之间无济于事。我甚至尝试过结帐。date
&gt; =%s并结帐。date
&lt; =%s没有运气。为什么不显示数据?
答案 0 :(得分:1)
仅在其他人搜索此信息时。
字段checkout
。date
不属于DATE或DATETIME类型,因此未显示当前查询的任何结果。
更改字段类型解决了问题。 (但这可能导致数据丢失,所以要小心)。
结束查询应该是(结帐。date
BETWEEN%s AND%s)
答案 1 :(得分:0)
由于您的日期位于文本字段中,因此无法将其用作比较。您必须先将该列强制转换为日期。
(STR_TO_DATE(checkout.`date`, '%Y-%m-%d') BETWEEN %s and %s)
确保这三种格式都是Y-m-d
格式,或者您可能需要转换它。