Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхранявате списък с дни от седмицата в MySQL?

За да реша този проблем, в крайна сметка използвам битова маска за съхраняване на делничните дни.

Промених съдържанието на масива от делнични дни на нещо подобно:

$days = [
     8, // Wednesday
    16, // Thursday
    64, // Saturday
];

Използване на този списък като справка:

 1 : Sunday
 2 : Monday
 4 : Tuesday
 8 : Wednesday
16 : Thursday
32 : Friday
64 : Saturday

След това добавих TINYINT колона за съхраняване на битмаска за делнични дни. Когато съхранявам стойностите в базата данни, мога просто да използвам следното:

$valueToMySQL = array_sum($days); // 88, with the sample above

За да търся редове с конкретен делничен ден, събота например, мога да използвам това условие:

... WHERE `weekdays` & 64;

Извличането на дните от седмицата от базата данни, тъй като масивът е малко по-малко прост. Използвам следната логика:

$days = [];
$bitmask = strrev(decbin($valueFromMySQL));
for ($i = 0, $s = strlen($bitmask); $i < $s; $i++) {
    if ($bitmask{$i}) {
        $days[] = pow(2, $i);
    }
}

Ако трябва да извлека всички редове със същия ден от седмицата като текущата дата, мога да предам текущия ден от седмицата към предишното SQL условие, както следва:

$weekday = (int) date('w'); // 0 for Sunday, to 6 for Saturday
$weekdayToMySQL = pow(2, $weekday); // 1 - 64

След това:

... WHERE `weekdays` & {$weekdayToMySQL};


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете цялата Дата на месеца заедно с данните от таблицата

  2. MYSQL UPDATE SET в същата колона, но с множество WHERE клаузи

  3. Проверете mysql връзката в sequelie

  4. Проблем с извеждането на арабски текст в php mysql utf-8

  5. Продукти на Magento импортират от базата данни с помощта на SQL заявка