我有一个数据库(phpmyadmin),在其中放置用户,网格如下所示
+-----+---------+-----------------+----------------+
| id | user | categorie_bit | calender_week |
+-----+---------+-----------------+----------------+
| 1 | Kevin | 01 | 39 |
+-----+---------+-----------------+----------------+对id和用户进行了自我解释。Categorie_bit代表他/她必须做的工作,就像和狗散步一样。
0再培训-无工作 1.特别职务-工作1 10 -工作2 11 -两项工作
日历周显示当前日历周。
在php中如下所示:
$date = new DateTime();
echo $date->format('W');我有不同的用户,对于这个实例39,每个用户都必须为这个日历周做一项工作。用户是随机从数据库中挑选的。(我使用了PDO包装)
$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周,等等…
我的第一个想法是以某种方式改变随机选择器。
有人知道如何做到这一点吗?
发布于 2015-09-24 10:47:37
只需在查询中添加一个WHERE子句,检查上周是否有用户的条目。我不熟悉您的PDO包装器,但是得到的查询应该是:
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更新
为了确保每个用户都没有被分配到另一个任务,直到每个用户都完成了一项任务,至少一次,我会以不同的方式记录信息。我会有两张桌子,一张是给用户的,一张是他们完成的工作,还有一周是他们完成的。
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 |
+----+--------+-----+------+然后可以使用以下查询:
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结果,您只需清除作业表,然后重新启动。
https://stackoverflow.com/questions/32759107
复制相似问题