【问题标题】:SQL query based on dropdown selection基于下拉选择的 SQL 查询
【发布时间】:2017-02-16 21:07:51
【问题描述】:

我想写一个基于下拉选择值的 SQL 查询。

例如,如果管理员选择今天,那么 SQL 查询应该只获取今天的记录等等。

HTML

<select name="report_date">
    <option value="Today">Today</option>
    <option value="Yesterday">Yesterday</option>
    <option value="Last7Days">Last 7 Days</option>
    <option value="This Week">This Week</option>
    <option value="LastWeek">Last Week</option>
    <option value="ThisMonth">This Month</option>
    <option value="LastMonth">Last Month</option>
    <option value="ThisYear">This Year</option>
    <option value="LastYear">Last Year</option>
    <option value="AllTime">All Time</option>
</select>

<input type="text" name="product_name"/>

PHP

$fixedrange = $_GET['report_date'];
$pname= $_GET['product_name'];

if($fixedrange=="Today"){
    $today = date('Y-m-d');
    $fixeddate = 'OR o.`custom_date`='. $today;
}

SQL 查询

SELECT *
FROM order_items AS oi
INNER JOIN orders o ON o.id=oi.`order_id`
WHERE oi.`product_name` LIKE '%$pname%' $fixeddate
  AND o.status = '1'
ORDER BY o.custom_date DESC

【问题讨论】:

    标签: php mysql database date


    【解决方案1】:

    你应该使用 concat

    $sql = " SELECT * FROM order_items AS oi
       INNER JOIN orders o ON o.id=oi.`order_id` 
       WHERE oi.`product_name` LIKE concat('%', $pname,'%') 
       $fixeddate 
       AND o.status = '1' 
       ORDER BY o.custom_date DESC ; ";
    

    或者不使用 php date 你可以使用date(o.custom_date) = curdate()

     if($fixedrange=="Today"){
        $today = date('Y-m-d');
        $fixeddate = 'OR  date(o.`custom_date`) = curdate() ' ;
    }
    
    $sql = " SELECT * FROM order_items AS oi
      INNER JOIN orders o ON o.id=oi.`order_id` 
      WHERE oi.`product_name` LIKE concat('%', $pname,'%') 
      $fixeddate
      AND o.status = '1' 
      ORDER BY o.custom_date DESC ; ";
    

    【讨论】:

    • 问题是今天点击时显示的所有记录?
    • o.custom_date列的类型是什么?
    • custom_date 是日期列类型
    • 是的,但我希望它在 if else if 条件下?比如今天 o.customdate 和昨天 o.customdate ??
    【解决方案2】:
     SELECT OrderId,DATE_ADD(date(OrderDate),INTERVAL + 30 DAY) AS OrderPayDate
     FROM Orders
    
     use +(plus) or - (minus) for adding future date or subtract for past date using DATE_ADD sql function
    

    【讨论】:

    • where column_date = DATE_ADD(date("column_date"), INTERVAL - 30 DAY) and column_date
    • 能否请您提前写下所有查询谢谢
    猜你喜欢
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-11
    • 2019-02-28
    • 2017-02-28
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多