我想在特定日期统计菜名

时间:2017-02-21 10:39:23

标签: php mysql

我有一个order_details表格,其中有一个item列。在该列中,我有如下的值。我正在使用PHP和mysql作为后端。

Item
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _
2017-02-09_chicken masala, 2017-02-10_RAJMA, 2017-02-11_ROTI, 2017-02-13_BENGAN MASALA, 2017-02-14_DAAL 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _

2017-02-06_CHAWAL,2017-02-07_RAJMA,2017-02-08_ROTI,2017-02-09_BENGAN MASALA,2017-02-10_DAAL

由此我想在两个日期之间报告菜名,但问题是菜名与日期有关。请帮助我 - 我是新手。

3 个答案:

答案 0 :(得分:0)

首先在表中组织数据,有一个Date列,数据类型为Date,dishname列有数据类型var-char和主键列,主键使用int并将其设置为自动增量。这样你只需要使用

查询数据

从tablename中选择*,其中日期> =' date1'和日期< =' date2';

答案 1 :(得分:0)

我已经用用户定义的函数编写了代码,以便在两个日期之间提取这些订购的商品。这是您可以用来实现您正在寻找的代码的代码。

function get_dishes($dishes_str, $from_date, $to_date) {
    $dishes_str_explode = explode(",", $dishes_str);
    $dishes_str_explode = array_map(function($v) {
        return trim($v);
    }, $dishes_str_explode);

    $dishes = array();

    foreach($dishes_str_explode as $dish) {
        $dish_explode = explode("_", $dish);
        $dishes[] = $dish_explode;
        unset($dish_explode);
    }

    $dishes_extracted = array_map(function($v) use ($from_date, $to_date) {
        if(strtotime($v[0]) >= strtotime($from_date) && strtotime($v[0]) <= strtotime($to_date)) {
            return $v;
        }
    }, $dishes);

    return array_values(array_filter($dishes_extracted));
}

$dishes = array(
    "2017-02-09_chicken masala, 2017-02-10_RAJMA, 2017-02-11_ROTI, 2017-02-13_BENGAN MASALA, 2017-02-14_DAAL",
    "2017-02-06_CHAWAL,2017-02-07_RAJMA,2017-02-08_ROTI,2017-02-09_BENGAN MASALA,2017-02-10_DAAL"
);

$dishes_out = get_dishes($dishes[0], "2017-02-12", "2017-02-14");

foreach($dishes_out as $dish) {
    // Output with formatted date
    // echo "<p>Date: " . date_format(new DateTime($dish[0]), 'd-m-Y') . "<br>Dish: {$dish[1]}</p>";

    // Ouput with as-is date
    echo "<p>Date: {$dish[0]}<br>Dish: {$dish[1]}</p>";
}

echo "<p>Total dishes: " . count($dishes_out) . "</p>";

如果您需要对代码进行任何解释,请在评论中告诉我。

顺便说一句,代码似乎正在经历代码嗅觉,如果重构完成,它可以更好地编写。

希望它有所帮助!

答案 2 :(得分:0)

$ date_from ='2017-02-09'; $ date_to ='2017-02-13';

$ sql =“SELECT SUBSTR(item,1,10)as dates,SUBSTR(item,12)as dishname FROM order_details WHERE SUBSTR(item,1,10)&gt;”。$ date_from。“AND SUBSTR(item ,1,10)&lt; =“。$ date_to;

执行此sql,您将获得所需的输出。