gpt4 book ai didi

Php日历星期随机用户计算

转载 作者:搜寻专家 更新时间:2023-10-30 20:37:46 26 4
gpt4 key购买 nike

我有一个数据库(phpmyadmin),我在其中放置了用户,网格看起来像这样

+-----+---------+-----------------+----------------+
| id | user | categorie_bit | calender_week |
+-----+---------+-----------------+----------------+
| 1 | Kevin | 01 | 39 |
+-----+---------+-----------------+----------------+

id 和用户是 self 解释的。 Categorie_bit 代表他/她当前必须做的工作,比如带狗散步。

0   - no job

1   - job 1

10 - job 2

11 - both jobs

日历周显示当前日历周。

在 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);

在下一步中,我给用户一个“工作”。

类别位 = 1。

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

编辑:我如何完成此操作以供进一步使用,假设用户 1 必须在第 39 周工作,用户 2 必须在第 44 周工作,依此类推...

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

有谁知道怎么实现的吗?

最佳答案

只需在您的查询中添加一个 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 个结果,您只需清除工作表并重新开始。

关于Php日历星期随机用户计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32759107/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com