sql >> Database teknologi >  >> RDS >> Mysql

Hvordan gemmer man en liste over hverdage i MySQL?

For at løse dette problem ender jeg med at bruge en bitmaske til at gemme hverdagene.

Jeg ændrede ugedages array-indhold til noget som dette:

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

Brug af denne liste som reference:

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

Så tilføjede jeg en TINYINT kolonne for at holde ugedagenes bitmask. Når jeg gemmer værdierne i databasen, kan jeg blot bruge følgende:

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

For at søge efter rækker med en bestemt ugedag, for eksempel lørdag, kan jeg bruge denne betingelse:

... WHERE `weekdays` & 64;

Hent ugedagene fra databasen, da et array er lidt mindre enkelt. Jeg bruger følgende logik:

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

Hvis jeg skal hente alle rækker med samme ugedag som den aktuelle dato, kan jeg overføre den aktuelle ugedag til den tidligere SQL-betingelse som følger:

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

Så:

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


  1. Indsæt Python List (JSON eller andet) i MySQL-databasen

  2. Wampserver-ikonet bliver ikke helt grønt, mysql-tjenester starter ikke op?

  3. Eksponering af tabelnavn og feltnavne i anmodnings-URL

  4. cron-job eller PHP-planlægger