2010-01-18 9 views
8

का उपयोग कर स्टैक ओवरफ्लो जैसे वोटिंग सिस्टम को कैसे बनाना है, मैं स्टैक ओवरफ़्लो वोट के समान कुछ वोट देने की कोशिश कर रहा हूं और वोट दे रहा हूं, अब मैंने इसे काम किया है (लेकिन यह काम करता है दृष्टिकोण) और फिर भी कुछ सही महसूस नहीं करता है, उम्मीद है कि कोई कुछ उपयोगी बदलाव सुझाएगा।अजाक्स/jquery/php (कुशल)

var x = $("strong.votes_balance").text(); 
    $("input.vote_down").click(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost/questions/vote_down/4", 
     success: function() 
     { 
     $("strong.votes_balance").html((parseInt(x) - parseInt(1))); 
     $("input[type=button]").hide(); 
     $(".thumbsup_hide").show(); 
     } 
     }); 
    }); 


    $("input.vote_up").click(function(){ 
    $.ajax({ 
     type: "POST", 
     url: "http://localhost/questions/vote_up/4", 
     success: function() 
     { 
     $("input[type=button]").hide(); 
     $("strong.votes_balance").html((parseInt(x) + parseInt(1))); 
     $(".thumbsup_hide").show(); 
     } 
     }); 
    }); 


    }); 

यहाँ मेरी HTML है::

<div class="thumbsup thumbsup_template_up-down" id="thumbsup_49"> 


<form method="post" id="voting_form"> 

<input type="hidden" value="49" name="thumbsup_id"/> 
    <span class="thumbsup_hide">Result:</span> 
    <strong class="votes_balance"><?=$row_q->post_vote?></strong> 

    <input type="button" title="Good Comment!" value="+1" name="thumbsup_rating" class="vote_up"/> 
    <input type="button" title="Bad Comment!" value="-1" name="thumbsup_rating" class="vote_down"/> 
</form> 

</div> 

$ row_q-> post_vote कुछ संख्या के बराबर होती यहाँ मेरी jQuery कोड है। अब जब मैं वोट अप बटन पर क्लिक करता हूं तो यह मजबूत के मूल्य में वृद्धि करता है और यदि मैं वोट पर क्लिक करता हूं तो यह घटता है।

मैं सीआई (कोडिनेटर) के साथ मूल php नहीं काम कर रहा हूं।

मैं इसका प्रदर्शन कैसे मापूं, इतने लंबे समय तक वोट देने या वोट करने में दो सेकंड से अधिक समय लग गया, मैंने अपनी क्वेरी में LIMIT 1 जोड़ा और अब यह कुछ तेज़ी से काम करता है, मुझे लगता है कि यह बहुत तेज प्रदर्शन करना चाहिए । इस यहाँ ommiting के लिए अपनी टिप्पणी के लिए धन्यवाद

और हाँ खेद अपने वोट कर रहे हैं और कार्यों नीचे वोट:

$this->db->query("UPDATE $table SET $what_field = ($what_field + 1) $wheremore WHERE $what_id = '$value' LIMIT 1"); 

और नीचे दिए गए वोट:

$this->db->query("UPDATE $table SET $what_field = ($what_field - 1) $wheremore WHERE $what_id = '$value' LIMIT 1"); 

अद्यतन मुझे लगता है कि कारण सामान्य रूप से धीमी चीजें हैं जो jquery के साथ मेरी अनुभवहीनता के कारण है, मुझे लगता है कि मेरी तालिका ओकी

अद्यतन द्वितीय

मैंने सिर्फ jquery AJAX फ़ंक्शन से php भाग हटा दिया है, केवल 1 तक संख्या बढ़ाने के लिए और यह अभी भी वास्तव में धीमा काम करता है।

अद्यतन तृतीय

जब मैं phpmyadmin यह 1.77 सेकंड में यह किसी कारण से भिन्न होता है जब तक सीमा 0.3 दूसरे से चलाता है के साथ क्वेरी चलाते हैं।

+0

आप किस डेटाबेस इंजन का उपयोग कर रहे हैं? –

+1

मतदान में 'कौन' मत भूलना। –

+0

@Juha मैं Mysql, @ Martijn उपयोग कर रहा हूँ - मैं उन चीजों बाद में मैं सिर्फ प्रदर्शन –

उत्तर

1

आपका डेटाबेस तालिका $table$what_id पर एक सूचकांक होना चाहिए। आम तौर पर यह प्राथमिक कुंजी होगी, लेकिन LIMIT 1 जोड़ने के बाद से यह कुछ भी मामला नहीं है?

+0

यह प्राथमिक कुंजी –

+0

अजीब है, एक एकल 'WHERE प्राथमिकkey = ' के साथ एक अद्यतन के रूप में शर्त कुछ मिलीसेकंड से अधिक नहीं लेनी चाहिए। रास्ते में '$ कहीं और 'क्या है? – Wim

+0

मैं इसके बहुत अजीब से सहमत हूं, वर्तमान में $ अधिक खाली चर है, मैं इसे वहां डालता हूं क्योंकि मैं इसमें तारीख जोड़ूंगा और कई और चीजें। अब मैं jquery AJAX फ़ंक्शन से php भाग को हटाता हूं, केवल 1 तक संख्या बढ़ाने के लिए और यह अभी भी वास्तव में धीमा काम करता है। –

0

आपका डेटाबेस कैसा दिखता है? सुनिश्चित करें कि $what_id फ़ील्ड सही ढंग से अनुक्रमित है, अधिमानतः यदि संभव हो तो प्राथमिक कुंजी होना चाहिए।

+0

हाँ, यह प्राथमिक है और इसे ठीक से मजबूत तत्व यह कभी कभी एक दूसरे को करने के लिए अधिक से अधिक लेता है की –

6
WHERE $what_id = '$value' 

आप तार उपयोग नहीं करना चाहिए/पहचानकर्ता के रूप में varchars। यह अप्राकृतिक है। संख्या/पूर्णांक का प्रयोग करें।

WHERE $what_id = $value 

हाँ, यह प्रभाव डीबी के प्रदर्शन पर विशेष रूप से जब rowcount उच्च हो जाता है।

+0

अनुक्रमित है, लेकिन यहां तक ​​कि अगर मेरे पास कोई php के साथ सिर्फ jQuery का उपयोग करें, सिर्फ .text बदलने के लिए(), वहाँ एक तरह से मैं कर सकता है jquery निष्पादन समय मापें? अभी के लिए +1। tnx –

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