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. फॉर्म जमा करने के बाद MySQL सिंटैक्स त्रुटि प्राप्त करना

  2. mysql से solr में डेटा कैसे आयात करें?

  3. php mysql सर्वर चला गया

  4. एक MySQL तालिका में उन सभी कॉलमों को खोजें जिनमें केवल शून्य मान हैं

  5. mysql शो टाइम स्लॉट उपलब्ध हैं और टाइम स्लॉट टेबल से व्यस्त हैं