我想知道是否可以简化以下过程:我想根据以下标准将游戏标记为发送给客户:(如果您熟悉Netflix,则相当于他们的电影队列。)
我有一个表格,用于存储名为wishlists的客户选择(他们的游戏队列)。我正在使用以下查询自动为新插入的记录排名(排名决定了发货的优先级):
schema (id, memberId, gameId, rank, markedForShipment, shippedOn, returnedOn)
INSERT INTO wishlists (memberId, gameId, rank, markedForShipment)
SELECT @memberId, @gameId, COALESCE(MAX(rank), 0) + 1, 0, null, null
FROM wishlists
WHERE wishlists.memberId = @memberId
我希望根据以下两个条件自动将“markedForShipment”填充为0或1:1. How many games a member has already received this month
和2. how many games a member currently has at home
目前,我在每次插入后都会执行以下操作:
从计划表(shipmentPerMonthLimit和gamesAtHomeLimit)中获取计划限制。
了解会员本月有多少货件(shipmentCount
)
SELECT COUNT(shippedOn) AS shipmentCount
FROM wishlists
INNER JOIN members ON wishlists.memberId = members.id
WHERE wishlists.memberId = @memberId
AND wishlists.shippedOn >= members.billingCycleStart
AND wishlists.shippedOn < DATE_ADD(members.billingCycleStart, INTERVAL 1 MONTH)
了解会员有多少gamesAtHome
SELECT COUNT(shippedOn) AS gamesAtHome
FROM wishlists
WHERE memberId = @memberId AND shippedOn IS NOT NULL AND returnedOn IS NULL
了解会员的排队货件(markedForShippment
)有多少
SELECT COUNT(markedForShippment) AS queuedShipments
FROM wishlists
WHERE memberId = @memberId AND markedForShipping = 1
检查游戏是否为库存。
如果满足以下所有条件,我通过设置markedForShipping to 1
来更新新插入的记录。
gamesAtHome is < than gamesAtHomeLimit
shipmentCount is < than shipmentsPerMonthLimit
queuedShipments is < gamesAtHomeLimit
如何改进此流程?我可以简化吗?我要问这些问题,考虑到性能可能是最重要的因素。 4。
答案 0 :(得分:1)
对我来说效率很高(我想你使用索引和外键)。除非你确实遇到性能问题,否则我的建议不是优化。
我认为优化这一点的唯一方法是引入冗余。例如,您可以将“shippingLimitReached”和“gamesAtHomeLimitReached”添加到成员表中。如果许多用户达到了他们的限制(并且可能是愿望列表很长的用户),您可以保存一些SELECT。