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

एक mysql क्वेरी लूप करें

यह अनावश्यक लूप और अतिरिक्त प्रश्नों को हटा देना चाहिए, यह आपके सभी उत्तरों को हल नहीं कर सकता है, लेकिन रास्ते में आपकी मदद कर सकता है।

मैंने इस कोड का परीक्षण नहीं किया है, इसलिए यह सुनिश्चित करने के लिए पहले इसे एक परीक्षण वातावरण में चलाना सुनिश्चित करें कि मैंने एक साधारण गलती नहीं की है जिससे डेटा हानि हो सकती है, प्रश्नों की प्रकृति के कारण, मैंने यह अस्वीकरण रखा है, <मजबूत> परीक्षण डेटा के साथ पहले इसका परीक्षण करें .

    $rest_max = '200';

    $query = "SELECT * 
        FROM `mailer_lists` ml  
            JOIN `mailer_controller` mc ON ml.project_name = mc.project_name
        WHERE `email` LIKE '%".$throttle_domain."' LIMIT ".$trim_speed."" ;

    $result = mysql_query($query) or die(mysql_error());
    $delete=array();

    while($row = mysql_fetch_assoc($result)){
        $email = $row['email'];
        $project_name = $rowa['project_name'];
        $from_name = $rowa['from_name'];
        $from_email = $rowa['from_name']."@".$node_domain;
        $subject = $rowa['subject'];
        $body = $rowa['body'];
        $content = addslashes($body);

    // set header
    $header_from = 'From: '.$from_name.' <'.$from_email.'>';
    $header_reply_to = '-f  '.$from_email;

    // send mail
    mail($email,$subject,$body,$header_from,$header_reply_to);


    $delete[] = " (project_name = '$project_name' AND email = '$email') ";
}

if (!empty($delete)) {
    mysql_query("DELETE FROM mailer_lists 
        WHERE " . implode(' OR ', $delete)) or die(mysql_error());  
}

परीक्षण करने का एक आसान तरीका mail पर टिप्पणी करना है भाग लें और बदलें DELETE FROM करने के लिए SELECT * FROM और यह सुनिश्चित करने के लिए चयन से जो आता है उसे प्रतिध्वनित करें ताकि यह सुनिश्चित हो सके कि जो उचित डेटा हटाया जाना चाहिए था वह बाहर आ गया।

कृपया नीचे पढ़ें

हालाँकि, हटाने का एक बेहतर तरीका है, टेबल्स ID . का उपयोग करना फ़ील्ड और स्टोर करें कि $delete . में . इससे OR में कमी आएगी कथन और गलती से वैध पंक्तियों को हटाने की त्रुटि को कम करें। यहां बताया गया है कि यह कैसे काम करेगा (सिर्फ अंत का उपयोग करें, ID को बदलें आपकी आईडी फ़ील्ड जो भी हो:

    $delete[] = $row['id'];
}

if (!empty($delete)) {
    mysql_query("DELETE FROM mailer_lists 
        WHERE id IN(" . implode(', ', $delete) . ")") or die(mysql_error());  
}

अपडेट करें

मुझे यकीन नहीं है कि यह कितनी तेजी से चलेगा, आदि। लेकिन इसे लूप के बिना करने का एक संभावित तरीका यह है:

    // Fill the array however you want to with the domains. this is just an example
    $throttle = array('domain1.com', 'domain2.com', 'domain3.com');
    $query = "SELECT * 
        FROM `mailer_lists` ml  
            JOIN `mailer_controller` mc ON ml.project_name = mc.project_name
        WHERE `email` LIKE '%". implode("' OR `email` LIKE '%", $throttle) . "'  LIMIT ".$trim_speed." ORDER BY project_name, email";

फिर से यह परीक्षण नहीं किया गया है, और मुझे यकीन नहीं है कि यह प्रदर्शन के अनुसार कैसे मेल खाएगा। लेकिन आपके लिए परीक्षण करने के लिए कुछ।

संपादित करें :fetch_assoc . में बदला गया जैसा कि fetch_array . पर लागू होता है



  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:अन्य sql स्क्रिप्ट फ़ाइल से sql स्क्रिप्ट फ़ाइल को कैसे कॉल करें?

  2. mysql में कुछ उपसर्ग के साथ उस पंक्ति के ऑटोइनक्रिकमेंट मान द्वारा किसी पंक्ति के विशिष्ट फ़ील्ड (कॉलम) को कैसे अपडेट करें?

  3. MySQL दो कॉलम टाइमस्टैम्प डिफ़ॉल्ट अब मान ERROR 1067

  4. त्रुटि 1022 - लिख नहीं सकता; तालिका में डुप्लिकेट कुंजी

  5. मैसकल स्प्लिट स्ट्रिंग और परिणामों के साथ चयन करें