簡體   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