2016-02-03 9 views
2

, как присоединиться к этому в одном запросе какой-либо помощи, чтобы объединить эти два запроса, как один без зацикливания,объединить два запроса, как один, без зацикливания 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; 

, как присоединиться к этому в одном запросе какой-либо помощи, чтобы объединить эти два запросы как один без цикла,

+0

Я не понимаю первый запрос. У вас есть агрегирующее предложение, но нет агрегирующих функций, и мы не знаем, какой столбец принадлежит к какой таблице. И вы используете страшный «SELECT *», который никому не помогает. – Strawberry

+0

Если вы создадите скрипт sql, мы можем вам помочь. –

ответ

0

Ваши запросы не имеют большого смысла. Для начала вашего первого запроса есть GROUP BY lead_follow_up. lead_id, но нет агрегатных функций. Таким образом, в MySQL, который вернет одну строку для каждого значения lead_id (какая строка возвращается, не определена).

Однако ваш массив данных образца имеет несколько строк на lead_id, поэтому он не может быть получен из запроса.

Вы также ВЛЕВОЙ ВЗАИМОДЕЙСТВУЮЩИЙСЯ ВЕДУЩИЙСЯ в таблицу проводов, но, похоже, не имеет смысла иметь 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 
+0

hi @ Kickstart, в 'lead_follow_up', имеющий более 48k записей и ведет таблицу с более чем 1lakh-записями, запрос по-прежнему загружается – Bala

+0

@Bala - Можете ли вы поднять объявление своего сайта и точно, что вы хотите выбраться, пожалуйста? – Kickstart

Смежные вопросы