php - 如何使用周数选择唯一记录ID的MYSQL PHP
问题描述
不确定我的标题是否准确地解释了我正在尝试做的事情,但这是我的用例:
我有一个 ID 的数据库1 = n
,我们称它为 500 条记录。
我想首先在 PHP 中获取周数,$week = date('W')
所以本周是48
.
然后我想返回 3 个唯一的 ID,它们在该周总是返回相同的 ID。举个例子。
Week 1 = Id's 1,2,3
Week 2 = Id's 4,5,6
Week 3 = Id's 7,8,9
Week 4 = Id's 10,11,12
Week 5 = Id's 13,14,15
Week 6 = Id's 16,17,18
等等。
我的方法是从第 1 周开始,指定 3 个 ID,然后在第 2 周将周乘以 2,然后接下来的每个星期继续乘以 2 并每周相加$i = 1
并每周递增$i++
,然后从起始编号。我下面的解决方案似乎有效,但感觉有点做作。
$weeks = array(1,2,3,4,5,6,7);
$output_arr = array();
$ids_arr = array();
$id1 = 1;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$i = -1;
foreach ($weeks as $week) {
if ($week == 1) {
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
} else {
$id1 = $week * 2 + $i;
$id2 = $id1 + 1;
$id3 = $id1 + 2;
$ids = array($id1, $id2, $id3);
$ids = implode(', ', $ids);
}
$output_arr[$week] = $ids;
$i++;
}
所以我的最终结果是:
$output_arr = Array ( [1] => 1, 2, 3 [2] => 4, 5, 6 [3] => 7, 8, 9 [4] => 10, 11, 12 [5] => 13, 14, 15 [6] => 16, 17, 18 [7] => 19, 20, 21 )
这是我想要的,但有没有更简单的清洁方法?而且,BONUS HELP NEEDED
如果它可以处理具有非顺序 ID 的表,那就更好了。在我的情况下,我的 ID 需要是连续的,如果我在 ID 的 EX 中有一个中断:1,2,3,4,6,7,8,10
它会弄乱输出数组。
谢谢您的帮助。
解决方案
无需将所有星期存储在数组中,一个简单的函数就可以完成这项工作:
$ids = array(1,2,3,4,6,7,8,10);
function weekIds($pWeek){
$wids = array();
for($i=1;$i<=3;$i++)
$wids[] = ($pWeek-1)*3+$i;
return $wids;
}
$seq = weekIds(2);
foreach($seq as $s)
$nonSeq[] = $ids[$s-1];
echo 'Sequential: ' .print_r($seq,true).PHP_EOL;
echo 'Non-Sequential: ' .print_r($nonSeq,true);
输出:
Sequential: Array
(
[0] => 4
[1] => 5
[2] => 6
)
Non-Sequential: Array
(
[0] => 4
[1] => 6
[2] => 7
)
推荐阅读
- objective-c - 如何从 iOS 应用程序在 Mac 上保存图像?
- spring-boot - 拥有多个异常类不像冗余,尤其是当我们使用错误代码时?
- django - 带有未知子键的 Django JsonField 查找过滤
- html - 在 PURE CSS 中选择带有选项样式的按钮
- mysql - FROM 子句中子查询的语法错误
- angular - 单击关闭按钮时如何停止激活角度反应表单验证
- nlp - 是否可以将常规文本转换为 .story 文件?
- http - 在 apache 2.2 上使用 mod_rewrite 重定向 http tp https
- javascript - 使用 jQuery ajax 发出 POST 请求后如何重定向到另一个页面?
- latex - 乳胶中的粗体表达