2015-10-18 136 views
0

我知道有一種方法可以使用JOIN來組合這三個查詢,但我無法將它包裹在頭上。如何基於另一個查詢結果集執行MySQLi查詢?

我在做什麼是首先檢索MessageIDSubscriberID。基於關閉這些結果,我搜集的信息數據和數據用戶:

$queued = $db->select("SELECT MessageID, SubscriberID FROM mailing_queue WHERE Paused = 0 ORDER BY StartDate ASC LIMIT 500"); 

if (!empty($queued)) { // if $queued exists 

    $i = 0; 

    foreach ($queued as $key => $value) {   

     $msg = $db->selectRow("SELECT Subject, Body FROM mailing_messages WHERE ID = '$value[MessageID]' LIMIT 1"); // Returns single row 

     if ($msg) { // If $msg exists 

      $to = $db->selectRow("SELECT Email, FirstName, LastName, History FROM mailing_subscribers WHERE ID = '$value[SubscriberID]' LIMIT 1"); // Returns single row 

      if ($to) { // If $to exists 

       // Send email & do other stuff 

      } 
     } 
    } 
} 

基本上,我試圖讓SubjectBodyEmailFirstNameLastNameHistory都在同一個查詢,如果可能的。

我知道必須有一個更有效的方法來做到這一點。

回答

1

所以,這個查詢應該給你一些東西在你的代碼段的if($to)部分。 你應該在行中爲你提供一切。

$queued = $db->select(
"SELECT 
mailing_queue.MessageID, 
mailing_queue.SubscriberID, 
mailing_messages.Subject, 
mailing_messages.Body, 
mailing_subscribers.Email, 
mailing_subscribers.FirstName, 
mailing_subscribers.LastName, 
mailing_subscribers.History 
FROM mailing_queue 
INNER JOIN mailing_messages ON mailing_messages.ID = mailing_queue.MessageID 
INNER JOIN mailing_subscribers ON mailing_subscribers.ID = mailing_queue.SubscriberID 
WHERE mailing_queue.Paused = 0 
ORDER BY mailing_queue.StartDate 
ASC LIMIT 500"); 

foreach($queued as $key=>$to){ 
    //whatever your send your email code is, demonstration: 
    echo $to['Subject']; 
    echo $to['SubscriberID']; 
    echo $to['FirstName']; 
} 
+0

這看起來great-正是我試圖做的,但我沒有得到任何結果在返回時應該有...... – JROB

+0

你得到一個錯誤,或者你得到一個空結果? –

+0

我發現它......'ORDER BY mailing_queue.StartDate'。 +1感謝您的幫助! – JROB

相關問題