首页 > 解决方案 > 如何使用周数选择唯一记录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它会弄乱输出数组。

谢谢您的帮助。

标签: phpmysqldate

解决方案


无需将所有星期存储在数组中,一个简单的函数就可以完成这项工作:

$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
)

推荐阅读