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

डिव को रिफ्रेश करें, लेकिन केवल अगर php फाइल से नई सामग्री है

मुझे बहुत पहले इसी तरह की समस्या का सामना करना पड़ा है, मुझे लगता है कि आप अपनी टिप्पणियों के भंडारण सर्वरसाइड के लिए MySQL या कुछ का उपयोग कर रहे हैं?

मैंने अपनी MySQL तालिका में पहले टाइमस्टैम्प पूर्णांक कॉलम जोड़कर अपनी समस्या हल की, फिर जब मैंने एक नई पंक्ति जोड़ी, तो मैं बस time() का उपयोग करूंगा वर्तमान समय बचाने के लिए।

mysql पंक्ति डालने का उदाहरण:

$query = "INSERT INTO comments (name, text, timestamp) VALUES ('". $name ."', '". $text ."',". time() .");";

चरण दो आपके द्वारा सर्वरसाइड से भेजे जा रहे डेटा को json_encode करना होगा:

$output = array();

if ($html && $html !== '') {   // do we have any script output ?
  $output['payload'] = $html;  // your current script output would go in this variable
}
$output['time'] = time();      // so we know when did we last check for payload update

$json = json_encode($output, ((int)JSON_NUMERIC_CHECK)); // jsonify the array
echo $json;                    // send it to the client

तो, अब शुद्ध html के बजाय, आपकी सर्वरसाइड स्क्रिप्ट कुछ इस तरह लौटाती है:

{
  "payload":"<div class=\"name\">Derpin<\/div><div class=\"msg\">Foo Bar!<\/div>",
  "time":1354167493
}

आप जावास्क्रिप्ट में डेटा को आसानी से पकड़ सकते हैं:

<script type="text/javascript"> // <![CDATA[

var lastcheck;
var content_main = $('#content_main');

pollTimer = setInterval(function() {
  updateJson();
}, 10000);

function updateJson() {
  var request = '/feed_main.php?timestamp='+ (lastcheck ? lastcheck : 0);

  $.ajax({
    url: request,
    dataType: 'json',
    async: false,
    cache: false,
    success: function(result) {
      if (result.payload) {        // new data
        lastcheck = result.time;   // update stored timestamp
        content_main.html(result.payload + content_main.html()); // update html element
      } else {                     // no new data, update only timestamp
        lastcheck = result.time;
      }
    }
  });
}

// ]]> </script>

यह सर्वर और क्लाइंट के बीच संचार का बहुत ध्यान रखता है, अब आप अपने डेटाबेस को कुछ इस तरह से क्वेरी करें:

$timestamp = 0;
$where = '';

if (isset($_GET['timestamp'])) {
  $timestamp = your_arg_sanitizer($_GET['timestamp']);
}

if ($timestamp) {
  $where = ' WHERE timestamp >= '.$timestamp;
}

$query = 'SELECT * FROM comments'. $where .' ORDER BY timestamp DESC;';

टाइमस्टैम्प आगे और पीछे हो जाते हैं, क्लाइंट हमेशा पिछली क्वेरी में सर्वर द्वारा लौटाए गए टाइमस्टैम्प को भेजता है।

आपका सर्वर केवल उन टिप्पणियों को भेजता है जो आपके द्वारा पिछली बार चेक किए जाने के बाद सबमिट की गई थीं, और आप उन्हें HTML के अंत में प्रीपेन्ड कर सकते हैं जैसे मैंने किया था। (चेतावनी:मैंने उसमें किसी प्रकार का विवेक नियंत्रण नहीं जोड़ा है, आपकी टिप्पणियाँ बहुत लंबी हो सकती हैं)

चूंकि आप हर 10 सेकंड में नए डेटा के लिए मतदान करते हैं, इसलिए आप पर्याप्त मात्रा में बैंडविड्थ को बचाने के लिए AJAX कॉल में शुद्ध डेटा भेजने पर विचार करना चाहेंगे (इसमें केवल टाइमस्टैम्प के साथ जेसन स्ट्रिंग, केवल 20 बाइट्स है)।

फिर आप एचटीएमएल उत्पन्न करने के लिए जावास्क्रिप्ट का उपयोग कर सकते हैं, इसमें आपके सर्वर से क्लाइंट को बहुत सारे काम ऑफलोड करने का भी फायदा है :)। आप एक बार में कितनी टिप्पणियां प्रदर्शित करना चाहते हैं, इस पर भी आपको अधिक बेहतर नियंत्रण प्राप्त होगा।

मैंने कुछ काफी बड़ी धारणाएं बनाई हैं, आपको अपनी आवश्यकताओं के अनुरूप कोड को संशोधित करना होगा। यदि आप मेरे कोड का उपयोग करते हैं, और आपकी बिल्ली|कंप्यूटर|घर में विस्फोट होता है, तो आपको सभी टुकड़े रखने को मिलते हैं :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL विचारों का उपयोग करना

  2. एकाधिक उपयोगकर्ता इनपुट के आधार पर MySQL क्वेरी का चयन करें

  3. बेहतर प्रदर्शन के लिए आश्रित सबक्वायरी को कैसे शामिल करें?

  4. एक में एकाधिक लार्वा परिवर्तन तालिका माइग्रेशन क्वेरी निष्पादित करें?

  5. JDBC स्टेटमेंट उदाहरण - बैच इंसर्ट, अपडेट, डिलीट