मेरे पास एक ओआईडी, पीआईडी ​​​​और स्थिति के साथ एक MySQL ऑफ़र तालिका है। STATUS में 3 ENUM मान हैं। ओ ए सी (खुला, स्वीकृत, बंद)। यह इस तरह दिख रहा है:

+---------+-------------+--------+
|   oid   |    pid      | status |
+---------+-------------+--------+
|    1    |     1       |    o   |
|    2    |     1       |    o   |
|    3    |     1       |    o   |
|    4    |     2       |    o   |
+---------+-------------+--------+

सभी ऑफर खुले हैं। जब कोई उपयोगकर्ता किसी ऑफ़र को स्वीकार करना चाहता है, तो वे एक बटन पर क्लिक करते हैं, जो पोस्ट आईडी (PID) और ऑफ़र आईडी (OID) को php फ़ाइल में भेजता है जो डेटाबेस को UPDATE स्टेटमेंट करता है। मैं चाहता हूं कि कथन इस तरह दिखने के लिए तालिका को अपडेट करे:

+---------+-------------+--------+
|   oid   |    pid      | status |
+---------+-------------+--------+
|    1    |     1       |    a   |
|    2    |     1       |    c   |
|    3    |     1       |    c   |
|    4    |     2       |    o   |
+---------+-------------+--------+

Psudo-PHP-MySQLI कथन:

UPDATE offers 
SET status='c' 
WHERE pid = $_POST['pid'], except WHERE oid = $_POST['oid']

लेकिन यह भी SET status='a' WHERE oid = $_POST['oid']
मैं PHP और MySQLi के लिए नया हूं इसलिए मुझे नहीं पता कि सभी कथनों को कैसे व्यवस्थित किया जाए। क्या इस तरह का बयान भी संभव है? मैं तैयार बयानों का उपयोग करना जानता हूं, लेकिन मैं यहां केवल सादगी के लिए मूल्यों को जोड़ रहा हूं। धन्यवाद!

-1
Dimitri Bostrovich 20 मार्च 2020, 02:45

1 उत्तर

सबसे बढ़िया उत्तर

किसी शर्त के आधार पर असाइन करने के लिए अलग-अलग मान निर्दिष्ट करने के लिए CASE का उपयोग करें।

UPDATE offers
SET status = 
    CASE oid
        WHEN $_POST['oid'] THEN 'a'
        ELSE 'c'
    END
WHERE pid = $_POST['pid']
0
Barmar 19 मार्च 2020, 23:53