繁体   English   中英

php / mysql,需要有关存储此数据的方法的建议

[英]php / mysql, need advice on method to store this data

基本上在我的网站上,每个星期的每一天都有复选框。 如果用户选中它们,那么这些天就是要在其用户帐户中保存的天数(在字段中)。

我将如何保存这些日期? 例如,如果某人检查了星期六和星期三,而另一个人保存了星期一和星期二,那么保存此信息的最佳方式是什么?

有人建议将其另存为0001001之类的位字符串,其中1代表所标记的星期几,而每天则代表7位。 有任何想法吗?

该表将如下所示:

user_id | days
10      | 0010010 (Wednesday and Saturday, week starts on Monday)

唯一的问题是如何从php输出此信息?

(我正在尝试以最佳方式在mysql和php端执行此操作)

建议在MySQL中使用长度为7的长度的位字段类型来保持较低的存储要求( BIT(7) )。

唯一的问题是如何从php输出此信息?

第一步是定义每个位到工作日名称的映射:

$days = array(
   'Monday',
   'Tuesday',
   ...
   'Sunday'
);

然后,您首先需要从数据库中选择二进制值,例如,作为十进制(整数)值:

SELECT days+0 FROM table;

在PHP中,您可以使用decbinsubstr将其转换为固定宽度的二进制数字字符串:

$binary = substr('000000'.decbin($integer), -7);

或更方便的sprintf

$binary = sprintf('%07b', $integer);

由于这些字符中的每个字符都是01您可以遍历它们并为所有设置的日期创建一个数组:

$array = array();
foreach (range(0, 7) as $day)
{
    if (! $set = (int) $binary[$day])
        continue;

    $array[] = $days[$day];
}

生成的$array现在包含用户检查的所有工作日名称。 然后可以输出它们:

$output = '(none)';
if (1 === $count = count($array)
{
    $output = $array[0]; # one day
}
elseif ($count)
{
   $last = array_pop($array); # last day
   $output = implode(', ', $array) . ' and ' . $last;
}

那就是数据库值的输出。 希望这会有所帮助。

我建议这样的表:

   id user_id day
   1     1     1
   2     1     4
   3     2     1
   4     3     7

您可以将日期存储在序列化数组中,这样就可以在需要时轻松将其取回。

$days = array('wednesday','saturday');
$store = serialize($days);

然后为该user_id存储$store

我认为这样存储会更容易:

user_id | sun | mon | tues | wed |...
     01 |  1  |  0  |  0   |  1  |

并将day列保留为tinyint(1)。 这样,在PHP中,您可以像这样去:

if($row['sun'] == 1)
    Do sunday stuff

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM