简体   繁体   English

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

[英]combine two queries as one without looping mysql

how to join this in single query any help to combine these two queries as one without looping, 如何将其合并到单个查询中,对将这两个查询合并为一个而不循环的任何帮助,

$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;

how to join this in single query any help to combine these two queries as one without looping, 如何将其合并到单个查询中,对将这两个查询合并为一个而不循环的任何帮助,

Your queries don't make much sense. 您的查询没有多大意义。 For a start your first query has a GROUP BY lead_follow_up . 首先,您的第一个查询具有GROUP BY lead_follow_up lead_id but no aggregate functions. lead_id但没有聚合函数。 So in MySQL that will return one row for each value of lead_id (which row it returns is not defined). 因此,在MySQL中,将为lead_id的每个值返回一行(未定义返回的行)。

Yet your array of sample data has multiple rows per lead_id so cannot have come from the query. 但是,您的样本数据数组每个lead_id具有多个行,因此不能来自查询。

You are also LEFT OUTER JOINing the leads table, yet it doesn't seem to make sense to have a lead_follow_up which doesn't relate to a lead. 您还可以从外部加入Leads表,但是拥有与Lead不相关的lead_follow_up似乎没有任何意义。 As such you may as well use an INNER JOIN. 因此,您也可以使用INNER JOIN。

I am going to assume that what you want is a list of leads / lead_follow_ups and for each one a couple of all the follow ups after that particular follow up. 我将假设您想要的是潜在顾客/ Lead_follow_ups的列表,并针对每个特定的后续行动进行所有后续行动。 That would give you something like this (making loads of assumptions as I do not know your table structure):- 那会给你这样的东西(做很多假设,因为我不知道你的表结构):

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM