这里我试图将日期和结束日期值开始到数据库。
这里我调用这个创建共享日期函数来向数据库添加值。
当我打电话给这个功能
函数1st获取$sharing
值。 $sharing
值将为“1 week
”或“2 week
”或“3 week
”...
$from_date
将包含日期值。
$product_life
的值为1 year
或2 year
...
我想在迭代中将值添加到数据库中..说。
我有一个$product_life = 1 year
,我有一个from_date = 2016-02-23
和sharing_basis= 1 week
当我使用上述值调用createSharingdates($productId)
时,它会通过order_datetime
获取该产品的用户,然后为每个用户添加共享日期。但在这里,我只能生成共享日期一个周期。
For.ex如果有4个用户,我只能为4个用户生成一次日期。 喜欢
user_id: 1
product_id: 24
start_date: 2015-02-02
end_date: 2015-02-09
user_id: 2
product_id: 24
start_date: 2015-02-10
end_date: 2015-02-17
user_id: 3
product_id: 24
start_date: 2015-02-18
end_date: 2015-03-26
user_id: 4
product_id: 24
start_date: 2015-02-27
end_date: 2015-03-05
我想要做的是想要生成共享日期,直到product_life
结束
例如:
如果产品寿命为product_life
一年,我想在sharing_basis上生成该1年的日期。所以输出就像..
输出:
user_id: 1
product_id: 24
start_date: 2015-02-02
end_date: 2015-02-09
user_id: 2
product_id: 24
start_date: 2015-02-10
end_date: 2015-02-17
user_id: 3
product_id: 24
start_date: 2015-02-18
end_date: 2015-02-26
user_id: 4
product_id: 24
start_date: 2015-02-27
end_date: 2015-03-05
user_id: 1
product_id: 24
start_date: 2015-03-06
end_date: 2015-03-13
user_id: 2
product_id: 24
start_date: 2015-03-14
end_date: 2015-03-21
user_id: 3
product_id: 24
start_date: 2015-03-28
end_date: 2015-03-35
user_id: 4
product_id: 24
start_date: 2015-03-42
end_date: 2015-03-49
... continues
代码:
function createSharingdates($productId){
$sharing_basis = getSharingBasis($productId);
$product_life = getlife($productId);
$from_date = getStartdate($productId);
$conn = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT user_id FROM orders WHERE product_id='$productId' ORDER BY order_datetime";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
$product_id = $productId;
while($row = $result->fetch_assoc()) {
$user_id = $row["user_id"];
$to_date = date('Y-m-d', strtotime('+'.$sharing_basis, strtotime($from_date)));
addSharingDates($product_id,$user_id,$from_date,$to_date);
$from_date = $to_date;
}
$conn->close();
}
}
答案 0 :(得分:0)
Starting with a similar link用户想要在给定范围内的所有可能日期,但没有固定的日期表。您可以在查询中动态生成一个表,然后将其用作其余查询/用户的基础...例如,从2015-02-02开始获得52周......您显然可以更改任何开始根据需要,日期是,并根据LIMIT记录(26周,52周,104周等)的数量来限制结束。
select
@curDate := Date_Add(@curDate, interval 1 day) as WeekStart,
Date_Add( @curDate, interval 7 day ) as WeekEnd
from
( select @curDate := '2015-02-02' ) sqlvars,
AnyOtherTable
limit 52 ) AllWeeksYouNeed
现在,您希望获得购买给定产品的所有用户的交易,只需加入两个结果。
SELECT
o.user_id,
o.Product_ID,
AllWeeksYouNeed.WeekStart,
AllWeeksYouNeed.WeekEnd
FROM
orders o
JOIN ( above entire query ) AllWeeksYouNeed
WHERE
o.product_id='$productId'
ORDER BY
o.order_datetime
这将产生一个笛卡尔结果,我认为这不是你想要的......但是根据你可以调整的持续时间(1年,2年,无论如何),它会给你每人每周一条记录。
现在,SHARING组件有点奇怪......这可以基于第一个查询中的旋转分配来完成。但是,我不想在不了解“分享”的目的的情况下将此与您混淆。它几乎看起来像某种旋转队列。