我试图拿出一个数据库结构,以账户上可用的某些周(奇/偶)
周和某些天产品一个例子: -product1可在奇数周的星期一销售 -product2每天都可以使用,甚至几周 -product3在周末可用
我想到了将第二个表中的产品与fk隔离开来,并将每个条件放在单独的行中,如下所示:
fk_prod1 weekday 1
fk_prod1 weekparity 1
fk_prod2 onweekday 1
fk_prod1 weekparity 0
以这种形式,我不知道如何获得今天,本周剩余时间和下周可用的产品。
欢迎提出任何建议:)
查询也非常感谢!
答案 0 :(得分:0)
这可能会有所帮助:)可能需要根据您使用该程序的情况进行调整,但这是一个主意:
表1:产品
这可以包含ProductID,ProductName
所以一行可能看起来像这样:1, product1
表2:ProductDayMatrix(ProductDayID,ProductDay)
表3:ProductWeekMatrix(ProductWeekID,ProductWeek)
或类似
最后是表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.
我并不是说它是完美的,但是除非您打算对这些行做更多的工作,否则我认为使用外键不会对您有所帮助吗?希望有帮助吗?