选择具有多个优先级和有限最大条目的数据

时间:2013-07-03 13:47:15

标签: php mysql sql

我需要创建一个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;

我想为每项运动选择所有应用程序并检查它们是否符合限制集。

因此,如果我选择所有篮球,我必须选择优先级高于第一优先级(或第二,第三......)的所有其他应用程序,如果最后一个优先级不满足限制。

1 个答案:

答案 0 :(得分:1)

我不能100%确定我是否理解您的要求,但我猜您想优先考虑得分最高的人。

为了解决这个问题,我怀疑在SQL中可以做到这一切,我会通过php脚本来解决这个问题。我也假设这个脚本不必进行超级优化,因为它不会经常运行。

所以我的建议是在上表中添加一个名为assign的字段。

然后我会将所有运动声明为数组并指定最大值

$sport_slots = array("running" => 9, "basketball" => 10);

然后我会对桌子进行计数,然后关闭那个数字,这样我们就知道我们将与所有人一起工作。

然后我会选择得分最高的人。

select * from `people` where `score`=(select max(`score`) from people) AND assigned=0;

使用这些结果......确定他们选择哪个项目进入哪个项目...确保它在sport_slots数组中有一个插槽(!= 0)。如果是,则从运动条目中减去1并更新要分配的条目= 1.

如果您需要有关此代码特定部分的帮助,请回复。