[英]Selecting data with multiple priorities and limited max entries
我需要创建一个PHP脚本来从具有多个优先级的MySQL表中选择数据吗?
MySQL的每一行都是几个“体育学科”的应用程序,运动员评分是评分的关键。
运动专栏是每个希望参加精确运动的参与者的优先事项。 每种运动的名额有限。
这意味着,如果没有满足他的优先级(例如,他在列表中排在第31位,但只有30个名额),那么下一个优先级必须是他的意愿。
一个例子:
ID | Name | Tenis | Swiming | Basketball | Runing | Score| ----------------------------------------------------------------------- 1 |John |0 |1 |2 |3 |80 | ----------------------------------------------------------------------- 1 |Bill |1 |2 |3 |4 |65 | ----------------------------------------------------------------------- 1 |Arnold |0 |1 |0 |2 |70 | -----------------------------------------------------------------------
每个门徒都有最大的参加者。 例如:
$max_tenis = 5; $max_swiming = 8; $max_basketball = 10; $max_runing = 9;
我想为每种运动选择所有应用程序,并检查它们是否符合限制设置。
因此,如果我要选择所有篮球,则必须选择所有其他应用程序,如果最后一个优先级没有达到限制,则优先级要高于第一优先级(或第二,第三...)。
我不确定是否能100%理解您的要求,但我想您想优先考虑得分最高的人。
为了解决这个问题,我怀疑是否可以在SQL中完成所有操作,我将通过php脚本来解决。 我还假设此脚本不必进行超级优化,因为它不会经常运行。
因此,我的建议是在上面的表中添加一个名为Assigned的字段。
然后,我将所有运动声明为数组并分配最大值
$sport_slots = array("running" => 9, "basketball" => 10);
然后,我要在桌子上计数,并暂时循环计数,以便我们知道我们将与所有人一起工作。
然后,我将选择得分最高的人。
select * from `people` where `score`=(select max(`score`) from people) AND assigned=0;
有了这些结果...确定他们选择哪种项目参加他们的运动...确保在sport_slots数组中有一个插槽(!= 0)。 如果是这样,请从运动项目中减去一个,并更新要分配的项目= 1。
如果您需要有关此代码特定部分的帮助,请回复。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.