每天和每周的可用性

时间:2019-01-30 18:13:48

标签: mysql database data-structures

我试图拿出一个数据库结构,以账户上可用的某些周(奇/偶)

周和某些天产品

一个例子: -product1可在奇数周的星期一销售 -product2每天都可以使用,甚至几周 -product3在周末可用

我想到了将第二个表中的产品与fk隔离开来,并将每个条件放在单独的行中,如下所示:

fk_prod1    weekday    1
fk_prod1    weekparity    1
fk_prod2    onweekday    1
fk_prod1    weekparity    0

以这种形式,我不知道如何获得今天,本周剩余时间和下周可用的产品。

欢迎提出任何建议:)

查询也非常感谢!

2 个答案:

答案 0 :(得分:0)

这可能会有所帮助:)可能需要根据您使用该程序的情况进行调整,但这是一个主意:

表1:产品

这可以包含ProductID,ProductName 所以一行可能看起来像这样:1, product1

表2:ProductDayMatrix(ProductDayID,ProductDay)

  • 1,星期一
  • 2,星期二
  • 星期三3
  • 4,星期四
  • 5,星期五
  • 6,星期六
  • 7,周日

表3:ProductWeekMatrix(ProductWeekID,ProductWeek)

  • 1 =奇数周
  • 2 =偶数周

或类似

  • 1,第1周
  • 2,第2周
  • 3,第3周
  • 4,第4周

最后是表4: 产品矩阵:(ProductID,ProductDayID,ProductWeekID)

这可以保存您的产品及其相应的数据。因此,您将数据和信息一起插入到此表中,看起来像这样。

(1,4,2)=产品1,在星期四,在偶数周。

或者(如果事情需要多个条件),可以使用2个不同的表来保存日期信息。

例如:ProductAvailablityMatrixDay和ProductAvailabilityMatrixWeek

然后,这些变量可能每个都具有多个值,因此,如果乘积1在星期一和星期四,您可以插入:(1,1)&(1,4)。然后从该表中读取将告诉您产品1在第1天和第4天。

答案 1 :(得分:0)

是否值得考虑采用类似于cron作业结构的方法?

您一周中的一天将永远是1-7 你这个月的周永远是1-6

因此,使用LIKE会产生0种可能的冲突,其中1可能与10匹配,因为您永远不会有2位数字。

因此,如果您的product1可能是:

day = 1 week = 1,3,5

对于product2,它将是:

day = 1,2,3,4,5,6,7 week=2,4,6

对于product3,它将是:

day=6,7 week=1,2,3,4,5,6(今年9月跨6个星期)

您的查询将类似于:

Today: "SELECT * FROM availability WHERE day LIKE '%".date("N")."%' AND week LIKE %".(date("W")-date("W",strtotime("first day of the month")))."%'"; // this is using some PHP to get the week of the days of the week and week of the month.

Tomorrow: "SELECT * FROM availability WHERE day LIKE '%".date("N",strtotime("tomorrow")."%' AND week LIKE %".(date("W",strtotime("tomorrow"))-date("W",strtotime("first day of the month")))."%'"; // this again is using some PHP to get the week of the days of the week and week of the month - you can achieve the same with just MYSQL but I'm more familiar with PHP to give you an idea.

我并不是说它是完美的,但是除非您打算对这些行做更多的工作,否则我认为使用外键不会对您有所帮助吗?希望有帮助吗?