我有一个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
由此我想在两个日期之间报告菜名,但问题是菜名与日期有关。请帮助我 - 我是新手。
答案 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,您将获得所需的输出。