2015-10-18 105 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

相关问题