Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQL कुशल शेड्यूल जनरेशन एल्गोरिथम

यह उत्तर केवल शेड्यूल भाग के लिए समाधान दिशा के रूप में है, न कि 100% अच्छा समाधान:

आपने जो बनाया है, उसके लिए सभी शर्तों को पूरा करने में सक्षम होने के लिए लूप की आवश्यकता होती है।

ऐसे मामले को जल्दी हल करने के लिए, वैक्टर में काम करना व्यावहारिक हो सकता है, जिसमें वेक्टर में सभी पदों को 0 (उपलब्ध) और 1 (लिया गया) द्वारा दर्शाया जाता है।

तो छात्र/गणित-1 अंक:

मान लें कि 2 कमरे और 3 घंटे हैं:गणित-1 वेक्टर प्रति कमरा तब है:

Room 1: [0 0 0]
Room 2: [0 0 0]

अनिवार्य रूप से (मुझे कम से कम) इस बात की परवाह नहीं है कि एक निश्चित कमरा उपलब्ध है, जब तक कि 1 उपलब्ध है:तो उपलब्धता के लिए इस मामले में एक और प्रति सूचकांक उत्तर हो सकता है (याद रखें:0 उपलब्ध है):

कमरा 1:[1 0 0] कमरा 2:[0 0 0] कक्ष परिणाम:[1 0 0] और [0 0 0] =[0 0 0]

तो एक AND बता सकता है कि क्या पहला घंटा अभी भी उपलब्ध है।

यदि आप अब इसे किसी छात्र के साथ उपलब्ध घंटों के साथ जोड़ते हैं (इस उदाहरण के लिए भी केवल 3):

छात्र A:[0 0 1]कक्ष परिणाम:[0 0 0]छात्र इस ऑपरेशन के लिए OR का उपयोग करके कमरे से मेल खाता है:[0 0 1] OR [0 0 0]=[0 0 1]

तो छात्र ए कमरे के परिणाम से मेल खाएगा।

SQL में:डेटा मॉडल (भाग:मिसिंग इज द कोर्स मैच):टेबल रूम:

CREATE TABLE room(
room_id INT,
space TINYINT DEFAULT 0,
hour INT DEFAULT 1
);

CREATE TABLE student(
student_id INT,
space TINYINT DEFAULT 0,
hour INT DEFAULT 1
)

सभी डेटा पूरी तरह से टेबल में डाला गया है:इस मामले में 1 कमरा, 3 घंटे, 3 स्थान उपलब्ध हैं।

INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,3);
INSERT INTO room VALUES (1,0,3);
INSERT INTO room VALUES (1,0,3);

छात्र के पास है:

INSERT INTO student VALUES(1,0,1);   
INSERT INTO student VALUES(1,0,2);   
INSERT INTO student VALUES(1,1,3);   

तो छात्र पहले दो घंटों में ही उपलब्ध हो जाता है।

अब एक प्रश्न से परिणाम प्राप्त करने के लिए:

SELECT room_id
FROM room a
INNER JOIN student b ON a.space=b.space AND a.hour=b.hour;

इस परिणाम को केवल अधिकतम 8 के समूहों में विभाजित किया जाना है, जिसमें यह किसी अन्य प्रोग्रामिंग भाषा के लिए SQL भाग और समय का अंत है।

इस मॉडल को एक तिथि के साथ विस्तारित किया जा सकता है, हालांकि यह केवल घंटों और सप्ताह के दिनों का उपयोग करते समय सबसे अच्छा काम करता है (सप्ताह के दिन उपलब्धता फिर से 0 या 1 है)।

जैसा कि मैंने कहा:यह एक अवधारणा/विचार है, 100% समाधान नहीं है, इसलिए इसका उपयोग करने से पहले इसे काम करने की आवश्यकता है.....



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं sqlalchemy में पहले से मौजूद डेटाबेस तालिका के दो अलग-अलग कॉलम हेडर कैसे बदलूं?

  2. प्रत्येक व्युत्पन्न तालिका की अपनी उपनाम त्रुटि होनी चाहिए

  3. MySQL में nth Row कैसे खोजें

  4. [java.lang.Object[]] प्रकार से टाइप करने के लिए कनवर्ट करने में विफल

  5. डेटाबेस इंडेक्सिंग पर गहराई से नज़र डालें