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

श्रेणीबद्ध मानदंडों को पूरा करने वाले संयोजन खोजें

आपको कुल लागत की अधिकतम सीमा को सीमित करना होगा, या संयोजनों की संख्या आसमान तक जाएगी, चाहे आप उन्हें खोजने का प्रयास करें। निम्नलिखित उदाहरण में यह 75 तक सीमित है, लेकिन आप इसे देखने के लिए अन्य मूल्यों की कोशिश कर सकते हैं, फिर भी आप उचित समय में परिणाम पा सकते हैं।

आप अपनी मुख्य तालिका के लिए सम्मिलन या अपडेट पर संयोजन तालिका को अपडेट करने के लिए इस समाधान को अनुकूलित भी कर सकते हैं, जिससे आपको किसी भी सीमा के लिए बहुत जल्दी परिणाम प्राप्त हो सकते हैं जो आपकी निर्धारित सीमा से अधिक नहीं है (लेकिन स्पष्ट रूप से धीमा सम्मिलन क्योंकि यह वह जगह है जहां सभी काम किया जाता है)।

टेबल बनाएं और ट्रिगर करें:

CREATE TABLE `total_max75` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `parts` varchar(255) NOT NULL,
 `num` int(11) NOT NULL,
 `total` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `total` (`total`,`num`)
); 

CREATE TABLE `newparts` (
 `name` char(4) NOT NULL,
 `price` int(11) NOT NULL,
 PRIMARY KEY (`name`)
);

DELIMITER //
CREATE TRIGGER addtotal AFTER INSERT ON newparts
FOR EACH ROW
BEGIN
IF NEW.price <= 75 THEN
   INSERT INTO total_max75 ( parts, num, total )
     SELECT CONCAT( t.parts, ', ', NEW.name), 
       t.num+1, t.total+NEW.price 
   FROM total_max75 t
   WHERE t.total <= 75 - NEW.price AND num < 40;

   INSERT INTO total_max75( parts, num, total )
     VALUES( NEW.name, 1, NEW.price );
END IF;
END//
DELIMITER ;

फिर इसका उपयोग करके पॉप्युलेट करें:

INSERT INTO newparts( name, price )
SELECT part_number, cost FROM yourtable
WHERE cost <= 75;

या (परीक्षण डेटा के रूप में)

INSERT INTO newparts( name, price ) VALUES
('A012', 5),('A034', 1),('A084', 10),('A094', 25),('A233', 75),
('A343', 75),('A370', 50),('B309', 13),('C124', 78);

और अंत में इसका उपयोग करके अपना परिणाम प्राप्त करें:

SELECT * FROM total_max75 WHERE total BETWEEN 70 AND 75;

आप यहां अधिकतम 75 से कम के साथ कोई भी श्रेणी रख सकते हैं (या जो भी आप तालिका निर्माण भाग और ट्रिगर में सीमा के रूप में निर्धारित करते हैं)।

परिणाम:

A084, A370, B309        73 (you missed this one in your question)
A034, A084, A370, B309  74
A233                    75
A343                    75
A094, A370              75


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Magento सेट तिथियों के बीच ऑर्डर योग का योग प्राप्त करें

  2. मैक ओएस एक्स - पर्यावरण त्रुटि:mysql_config नहीं मिला

  3. इंट कॉलम से एक स्ट्रिंग को क्वेरी करना?

  4. बाएँ जॉइन का उपयोग करके MySQL में कई तालिकाओं को अद्यतन करें

  5. ऑटो वेतन वृद्धि प्राथमिक कुंजी को पुन:व्यवस्थित / रीसेट करें