我們有一個將聯繫人推送到我們的郵件系統隊列中的sql查詢。我們認識到的一件事是我們每個郵件IP都有自己的限制。這意味着不用郵寄每分鐘發送2或3封電子郵件給所有目標域,我們可以每個域發送2或3個IP ,域名爲。我們有一個工作查詢可以交叉檢查我們的黑名單以及我們的跟蹤系統,因此我們不會向已執行操作的用戶重新發送郵件。限制mysql查詢的多個結果
$query = "SELECT `email`,`template`,`id` FROM `q_main` WHERE
`email` NOT IN (SELECT `email` FROM `c_blacklist` WHERE `email` = `q_main`.`email`) AND
`email` NOT IN (SELECT `s_log`.`email` FROM `s_log`,`t_analytics` WHERE `t_analytics`.`key` = `s_log`.`key` AND `q_main`.`template` = `t_analytics`.`campaign_id`) LIMIT ".$num_nodes."";
上述查詢完美無缺。它只是獲取與查詢結果相匹配的下一組電子郵件,而不考慮目標域。該限制是通過將ip地址數量乘以每個ip的最大每分鐘數量(通常爲2或3分鐘)來設置的。
要收集隊列中所有可用的目標域,我們可以運行下面的查詢。這會提取隊列中的所有目標域以及計數。
$query = "SELECT SUBSTRING_INDEX(email, '@', -1) AS dd, COUNT(*) AS cc FROM q_main GROUP BY SUBSTRING_INDEX(email, '@', -1) ORDER BY cc DESC";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$send_domains[] = $row['dd'];
}
下面是我們的測試查詢,它基本上什麼都不做。它查詢與第一個查詢相同的內容,只是現在它使目標域數組崩潰。它沒有做的是限制每個目標域的結果,這是我們正在努力完成的。
$query = "SELECT `email`,`template`,`id` FROM `q_main` WHERE
`email` NOT IN (SELECT `email` FROM `c_blacklist` WHERE `email` = `q_main`.`email`) AND
`email` NOT IN (SELECT `s_log`.`email` FROM `s_log`,`t_analytics` WHERE `t_analytics`.`key` = `s_log`.`key` AND `q_main`.`template` = `t_analytics`.`campaign_id`) AND
`email` LIKE '%".implode("' OR `email` LIKE '%",$send_domains)."' ";
總結這一切,我們正在努力做的是選擇和限制記錄基於每一個目標域。我們如何設定每個目標域的限制而不限制整個查詢,就像我們在第一個例子中所做的那樣?我們確實嘗試通過每個目標域循環查詢,但它的表現並不好。
對於那些好奇的人,我們正在嘗試這樣做來實現郵件IP的評分系統。這樣,當軟啓動或負面反饋通過特定ip時,我們將能夠限制或跳過目標域。
請不要將'mysql_ *'函數用於新代碼。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是很好的PDO教程](http://goo.gl/vFWnC)。 –