简体   繁体   中英

Using between 2 dates to query data

I have 2 input boxes in a form that I will input beginning date under selDate and end date under selDate2. My table stores the date field in a text field.

<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>

I am using the following statement to list the corresponding rows.

$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);

I am using BETWEEN both variables in the query. When input the dates I echo blank rows. I have also tried checkout. date BETWEEN CAST(%s AS DATE) AND CAST(%s AS DATE) to no avail. I even tried checkout. date >=%s AND checkout. date <=%s with no luck. Why is it not displaying the data?

Just for when others search for this information.

the field checkout . date was not of the type DATE or DATETIME and therefor was not showing any results with the current query.

Changing field type resolved the problem. (this however could result in data los so be careful).

End query should be (checkout. date BETWEEN %s AND %s)

Since your date is in a text field, it can't be used as comparison. You have to cast that column as a date first.

(STR_TO_DATE(checkout.`date`, '%Y-%m-%d') BETWEEN %s and %s)

Make sure that all three are in a Ymd format, or you may have to convert it.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM