2011-05-01 96 views
0

我想從電子郵件列表中只獲取域。這是我所:substring_index存儲到會話

$query = "SELECT DISTINCT substring_index(email, '@', -1)"; 
$query .= " FROM `mailer_lists`"; 
$result = mysql_query($query) or die(mysql_error()); 

while($row = mysql_fetch_array($result)){ 
    $sending_domain[] = $row['email']; 
    $_SESSION['sending_domain'] = $sending_domain; 
} 

基本上,它會檢查所有我發送到域mailer_lists。我需要的僅僅是mailing_lists表中的域,並將它們存儲到會話的數組中。我在while循環中做了一些錯誤,我不確定是什麼。

回答

1

我沒有辦法確認您正確使用substring_index,但假設你是...

$query = "SELECT DISTINCT substring_index(email, '@', -1) as email_domain"; 
$query .= " FROM `mailer_lists`"; 
    $result = mysql_query($query) or die(mysql_error()); 

$sending_domain = array(); 
while($row = mysql_fetch_array($result)){ 
    $sending_domain[] = $row['email_domain']; 
} 

$_SESSION['sending_domain'] = $sending_domain; 

所以我所做的修改...

  1. as email_domain放入查詢中。
  2. 創建之初
  3. 空白陣列將分配給會話while循環之外,它屬於

我覺得前兩項只是形式,但即時通訊更加舒適與他們的方式。第3步,將會話分配放在循環之外,是真正重要的。只有在填充$sending_domain時才應該執行一次。

+0

正確的是我在我的sql查詢中缺少'as'。這現在很有意義。我還假設while循環中的$ _SESSION會導致很多資源問題,這就解釋了爲什麼我的服務器在每個cron作業期間一直處於行動狀態。 – john 2011-05-01 05:23:00

2

您想將其設置爲以外的循環。

$sending_domain = array(); 
while($row = mysql_fetch_array($result)){ 
    $sending_domain[] = $row['email']; 
} 

$_SESSION['sending_domain'] = $sending_domain;