[英]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.