2011-11-04 6 views
5

मैं एक ऐप बना रहा हूं जहां एकाधिक उपयोगकर्ता अन्य टिप्पणियों के ऊपर या नीचे टिप्पणियां पोस्ट कर सकते हैं। यह धागा प्रकार की संरचना नहीं है। यह एक वर्ड दस्तावेज़ पर सहयोग करने की तरह है। मुझे इन प्रविष्टियों को हल करने के तरीके को डिजाइन करने में परेशानी हो रही है।एक सूची को ऑर्डर/सॉर्ट करने के लिए जहां एकाधिक उपयोगकर्ता अलग-अलग स्थितियों में सम्मिलित होते हैं?

MySQL और PHP का उपयोग करना, प्रविष्टि does not काम के समय तक छँटाई, और न तो टिप्पणी स्थिति से छँटाई स्थिति में परिवर्तन की वजह से अन्य टिप्पणी inbetween उपयोगकर्ता पदों अगर करता है। मैं प्रत्येक नई प्रविष्टि के लिए टिप्पणी पदों को फिर से क्रमबद्ध नहीं करना चाहता (अगर हजारों प्रविष्टियां हैं और दर्जनों उपयोगकर्ता एक ही काम कर रहे हैं)।

इस डिजाइन करने के लिए सबसे अच्छा तरीका क्या है?

+0

अगर ** आपकी समस्या को हल करने में आपकी सहायता करने के लिए ** एक ** स्वीकार करें याद रखें। –

उत्तर

-1

मैं निश्चित रूप से स्थिति से आदेश देने के साथ जाना होगा। डालने पर, यह केवल नीचे दी गई सभी प्रविष्टियों को बढ़ाने का सवाल है - एक update क्वेरी। उस कार्यान्वयन की एक महत्वपूर्ण विशेषता यह है कि यह समेकन को बहुत अच्छी तरह से संभालती है; यदि दो समवर्ती आवेषण हैं, तो आप परवाह नहीं करते कि किस क्रम में वृद्धि हुई है (लेकिन आपको एक गैर-स्थितित्मक पीके की आवश्यकता है, इसलिए जब कोई सम्मिलन आपके ऊपर होता है तो कोई परेशान नहीं होता है)।

एक वैकल्पिक एक पेड़ है, जिसका अर्थ है कि आप केवल शाखा में आप नीचे दिए गए प्रविष्टियों अद्यतन करने की आवश्यकता के रूप में यह मॉडल करने के लिए है। लेकिन यह एक दुर्लभ स्थिति होने जा रहा है जहां रखरखाव ओवरहेड उचित है। (एक समझौता मॉडल करने के लिए है एक रो-विलो के रूप में है - आप हिस्सा जो फार्म शाखाओं में कुल विभाजित है, लेकिन आप शाखाओं से शाखाओं की अनुमति नहीं देते हैं, वह कभी हर एक रिकॉर्ड अपडेट करने की बचा जाता है, लेकिन मैं अभी भी अनुमान लगा रहा हूँ यह पहली दृष्टिकोण की तुलना में भूमि के ऊपर के लायक नहीं है।)

+0

ध्यान दें कि गुस्ताव के दृष्टिकोण में तीन सुझावों का सबसे खराब प्रदर्शन है। आप HTML में संभावित रूप से बड़े परिणाम को तुरंत प्रस्तुत करने में सक्षम होना चाहते हैं, इसलिए प्रदर्शन पर विचार करना सुनिश्चित करें। – niczero

1

क्या आप का वर्णन कर रहे हैं एक linked list है। समस्या यह है कि वे केवल एसक्यूएल का उपयोग करके पुनः प्राप्त करना मुश्किल होता है। मेरा समाधान पुनर्प्राप्ति पर सॉर्टिंग करने के लिए PHP का उपयोग करना है।

आपका तालिका कुछ इस तरह दिखेगा:

CREATE TABLE page { 
    page_id INT, 
    first_comment_id INT 
} 

CREATE TABLE comment { 
    comment_id INT PRIMARY KEY AUTOINCREMENT, 
    page_id INT, 
    next_comment_id INT 
} 

आपकी क्वेरी सरल है:

SELECT comment_id, next_comment_id 
FROM comment 
WHERE page_id = $page_id 
ORDER BY comment_id DESC 

महत्वपूर्ण कदम एक सरणी है कि अनुसार अनुक्रमणित है में mysql_fetch_assoc() से परिणाम की मालिश करने के लिए है comment_id पर:

$result = mysql_query($sql); 
$indexed_list = array(); 
while ($row = mysql_fetch_assoc($result)) 
{ 
    $indexed_list[$row['comment_id']] = $row; 
} 

इस तरह के एक सरणी में परिणाम:

$indexed_list = array(
    1 => array("comment_id"=>1, "next_comment_id"=>2), 
    2 => array("comment_id"=>2, "next_comment_id"=>5), 
    3 => array("comment_id"=>3, "next_comment_id"=>4), 
    4 => array("comment_id"=>4, "next_comment_id"=>0), 
    5 => array("comment_id"=>5, "next_comment_id"=>3)); 

पीएचपी समारोह उन्हें प्रदर्शन योग्य क्रम में सॉर्ट करने के लिए सरल है:

function llsort($indexed_list, $first_comment_id) 
{ 
    $sorted_list = array(); 

    $node = $indexed_list[$first_comment_id]; 
    array_push($sorted_list, $node); 

    do 
    { 
     $node = $indexed_list[$node['next_comment_id']]; 
     array_push($sorted_list, $node); 
    } while ($node['next_comment_id'] != 0 
     AND isset($indexed_list[$node['next_comment_id']])); 

    return $sorted_list; 
} 

आप पृष्ठ मेज से first_comment_id मिलता है। बेशक, आपको अभी भी नोड डालने और नोड को हटाने के लिए फ़ंक्शंस को कार्यान्वित करना होगा, लेकिन पाठक के लिए अभ्यास के रूप में छोड़े गए हैं। नोड्स डालने और हटाने के लिए लेनदेन का उपयोग करना न भूलें।

अधिक MySQL में जुड़ा हुआ सूचियों के बारे में जानकारी:

0

यह एक अच्छा समय MPTT उपयोग करने के लिए की तरह लगता है, संशोधित पूर्व -र्डर्ड ट्री ट्रैवर्स एल। यह अक्सर थ्रेडेड टिप्पणी बोर्ड और उस प्रकृति की चीजों के लिए प्रयोग किया जाता है। आरडीबीएमएस में पदानुक्रमित संरचनाओं को रखने के सभी तरीकों में से, पेड़ पर नोड्स को छंटनी या जोड़ते समय सबसे कम ओवरहेड होता है।

यहां एक good intro, and another है। इसके लिए चारों ओर गुगल करने से आपको कुछ और जानकारी मिलनी चाहिए। एक बार जब आप अवधारणा को समझते हैं तो इसे लागू करना मुश्किल नहीं है।

संबंधित मुद्दे