किसी डेटाबेस में "आदेशित सूचियों" को संग्रहीत करने का सबसे अच्छा तरीका क्या है, ताकि उन्हें अपडेट करना (प्रविष्टियों के क्रम को जोड़ना, निकालना और बदलना) आसानी से किया जा सके?किसी डेटाबेस में आदेशित सूचियों को संग्रहीत करने का सबसे अच्छा तरीका?
डेटाबेस पर विचार करें जहां आपके पास उपयोगकर्ताओं और फिल्मों के लिए एक टेबल है। प्रत्येक उपयोगकर्ता की पसंदीदा फिल्मों की एक सूची होती है।
चूंकि कई उपयोगकर्ता एक ही फिल्म को पसंद कर सकते हैं, इसलिए मैंने उपयोगकर्ताओं और फिल्मों को अलग-अलग टेबल बनाये और उन्हें जोड़ने के लिए तीसरी तालिका का उपयोग किया, usermovies।
usermovies में उपयोगकर्ता और एक मूवी और "ऑर्डर नंबर" की एक आईडी है। उपयोगकर्ताओं के लिए फिल्मों की सूची ऑर्डर करने के लिए ऑर्डर नंबर का उपयोग किया जाता है।
- प्रोमेथियस काले 3
- में
- पुरुषों तानाशाह
और उपयोगकर्ता जैक की तरह एक सूची हो सकता है::
उदाहरण के लिए, उपयोगकर्ता जोश निम्न सूची हो सकता है
- डिक्टेटर
- प्रोमेथियस
- युद्धपोत
- स्नो व्हाइट एंड द हंट्समैन
तो, वे कुछ पसंदीदा साझा करते हैं, लेकिन जरूरी नहीं कि एक ही क्रम में।
मैं एक क्वेरी का उपयोग कर प्रत्येक उपयोगकर्ता के लिए फिल्म ID की सूची प्राप्त कर सकते हैं: फिर
SELECT movie_id FROM usermovies WHERE user_id =? ORDER BY order_number
, आदेश दिया movie_ids के साथ, मैं किसी अन्य क्वेरी
SELECT name FROM movies WHERE id in (?,?,?) ORDER BY FIELD (id, ?,?,?)
का उपयोग करके फिल्मों की सूची प्राप्त कर सकते हैं तो सवाल पूछता है, लेकिन सूचियों को अपडेट करना वास्तव में जटिल लगता है - क्या इस जानकारी को स्टोर करने के बेहतर तरीके हैं ताकि उपयोगकर्ता एक्स के लिए फिल्मों की सूची प्राप्त करना आसान हो, फिल्में जोड़ें, उन्हें हटा दें और सूची का क्रम बदल दें?
आप इस्तेमाल कर सकते हैं एक उपयोगकर्ता के लिए सभी फिल्मों प्राप्त करने के लिए ए इस तरह की एक क्वेरी: 'फिल्मों से चुनें नाम INERER usermovie.movie_id = movies.id और usermovie.user_id = पर usermovie में शामिल हों? Usermovie.order_number' द्वारा आदेश। और मुझे नहीं लगता कि वर्तमान दृष्टिकोण के साथ क्या मुश्किल है? किसी उपयोगकर्ता को मूवी जोड़ने के लिए आप बस अपने लिंकटेबल में एक नई प्रविष्टि डालते हैं और इसे हटाने के लिए आप एंट्री हटाते हैं। – Cyclonecode
धन्यवाद! यह आसान होगा, हालांकि मेरी असली समस्या यहां अद्यतन है। – wannabeartist