[英]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中,您可以使用decbin
和substr
將其轉換為固定寬度的二進制數字字符串:
$binary = substr('000000'.decbin($integer), -7);
或更方便的sprintf
:
$binary = sprintf('%07b', $integer);
由於這些字符中的每個字符都是0
或1
您可以遍歷它們並為所有設置的日期創建一個數組:
$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.