首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Php日历周随机用户计算

问Php日历周随机用户计算
EN

Stack Overflow用户
提问于 2015-09-24 10:32:00
回答 1查看 34关注 0票数 2

我有一个数据库(phpmyadmin),在其中放置用户,网格如下所示

代码语言:javascript
复制
+-----+---------+-----------------+----------------+
| id  |  user   |  categorie_bit  |  calender_week |
+-----+---------+-----------------+----------------+
|  1  |  Kevin  |              01 |             39 |
+-----+---------+-----------------+----------------+

对id和用户进行了自我解释。Categorie_bit代表他/她必须做的工作,就像和狗散步一样。

0再培训-无工作 1.特别职务-工作1 10 -工作2 11 -两项工作

日历周显示当前日历周。

在php中如下所示:

代码语言:javascript
复制
$date = new DateTime();     
echo $date->format('W');

我有不同的用户,对于这个实例39,每个用户都必须为这个日历周做一项工作。用户是随机从数据库中挑选的。(我使用了PDO包装)

代码语言:javascript
复制
$table = "users";
$columns = array("id", "firstname");
$orderBy = array('RAND()');

$result_set = $db->select($table,$columns, Null, Null, $orderBy, 1);

在接下来的步骤中,我给用户一个“作业”。

Categorie_bit = 1.

现在的问题是,我想选择一个上个日历周没有“工作”的用户,这样所有的用户都能得到平等的待遇。

编辑:我如何完成这个进一步的使用,让我们假设用户1必须工作第39周和用户2的第44周,等等…

我的第一个想法是以某种方式改变随机选择器。

有人知道如何做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2015-09-24 10:47:37

只需在查询中添加一个WHERE子句,检查上周是否有用户的条目。我不熟悉您的PDO包装器,但是得到的查询应该是:

代码语言:javascript
复制
SELECT u.id, u.firstname 
FROM users u 
WHERE (
    SELECT COUNT(*) 
    FROM users u2 
    WHERE u.id = u2.id 
    AND u2.calendar_week = <?= $date->format('W') - 1 ?>
    AND u2.categorie_bit > 0
) = 0
ORDER BY RAND()
LIMIT 1

更新

为了确保每个用户都没有被分配到另一个任务,直到每个用户都完成了一项任务,至少一次,我会以不同的方式记录信息。我会有两张桌子,一张是给用户的,一张是他们完成的工作,还有一周是他们完成的。

代码语言:javascript
复制
Users
+----+-------+
| id | user  |
+----+-------+
|  1 | Kevin |
+----+-------+

Jobs
+----+--------+-----+------+
| id | userId | job | week |
+----+--------+-----+------+
|  1 |      1 |  01 |   39 |
|  2 |      2 |  10 |   39 |
|  3 |      6 |  01 |   40 |
|  4 |      8 |  10 |   40 |
+----+--------+-----+------+

然后可以使用以下查询:

代码语言:javascript
复制
SELECT u.id, u.user 
FROM users u
LEFT JOIN jobs j ON u.id = j.userId
WHERE j.id IS NULL
ORDER BY RAND()
LIMIT 1

因此,现在您只得到没有完成一项工作的用户。一旦每个人都完成了一个作业,并且查询返回了0结果,您只需清除作业表,然后重新启动。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32759107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档