将两个查询合并为一个而不循环mysql

时间:2016-02-03 13:36:06

标签: mysql

如何在单个查询中加入此任何帮助,将这两个查询合并为一个没有循环的

$today_date = mktime(0, 0, 0, $mon, $day-1, $year);

SELECT *  FROM (`lead_follow_up`) LEFT JOIN `leads` ON `leads`.`id` = `lead_follow_up`.`lead_id` WHERE `date` <=  $today_date GROUP BY `lead_follow_up`.`lead_id` ORDER BY `lead_follow_up`.`date` DESC
from the above query i get array $previou



$previou=    Array
(
    [0] => stdClass Object
        (
            [id] => 1
            [lead_id] => 75943
            [date] => 1438930800
            [updated_on] => 1438884890
        )

    [1] => stdClass Object
        (
            [id] => 2
            [lead_id] => 75943
            [date] => 1416459600
            [updated_on] => 1415901523
        ),
     [2] => stdClass Object
        (
            [id] => 3
            [lead_id] => 75943
            [date] => 1416459600
            [updated_on] => 1415901523
        ),....etc

);

foreach($previou as $key => $p):
    $q = "SELECT `id` FROM (`lead_follow_up`) WHERE `lead_id` = '".$p->id."' AND `date` > '".$p->date."' ORDER BY `updated_on` DESC ";
    if(!$this->db->query($q)){
        $previouData[$key] = $p;
        $pCount++;
    }
endforeach;

如何在单个查询中加入此任何帮助,将这两个查询合并为一个没有循环的

1 个答案:

答案 0 :(得分:0)

您的疑问没有多大意义。首先,您的第一个查询包含 GROUP BY lead_follow_uplead_id ,但没有聚合函数。所以在MySQL中,将为lead_id的每个值返回一行(它返回的行未定义)。

然而,您的示例数据数组每个lead_id有多行,因此不能来自查询。

你也是LEFT OUTER加入潜在客户表,但是有一个与潜在客户没有关系的lead_follow_up似乎没有意义。因此,您也可以使用INNER JOIN。

我将假设你想要的是一个潜在客户/ lead_follow_ups列表,并且在每个特定后续行动后的几个后续行动中。这会给你这样的东西(由于我不知道你的表结构而做出大量的假设): -

SELECT leads.id AS lead_id,
        lead_follow_up.id
        lead_follow_up.`date`,
        lead_follow_up.updated_on,
        COUNT(lead_follow_up_future.id) AS future_lead_count
FROM leads 
INNER JOIN lead_follow_up ON leads.id = lead_follow_up.lead_id 
LEFT OUTER JOIN lead_follow_up AS lead_follow_up_future ON leads.id = lead_follow_up.lead_id AND lead_follow_up_future.`date` > lead_follow_up.`date` 
WHERE lead_follow_up.`date` <=  $today_date 
GROUP BY leads.id AS lead_id,
        lead_follow_up.id
        lead_follow_up.`date`,
        lead_follow_up.updated_on
ORDER BY lead_follow_up.date DESC