Как посчитать записи в БД по нескольким параметрам?

Рейтинг: 0Ответов: 1Опубликовано: 23.09.2014

Здравствуйте.

Есть задача, вывести воронку продаж!

первая база - в ней данные об уровнях воронки, уровни обозначаются полем id_parameter;

вторая база - база статусов, сразу несколько статусов может принадлежать к одному уровню из первой базы. id_parameter первой базы записан к статусам второй базы в поле funnel;

третья база - база лидов\клиентов, у которых установлены id_parameter статусов из второй базы;

Нужно вывести все данные: Первой базы, т.е. Название Уровня (это могу), далее посчитать, Сколько лидов Третей базы относится к статусам Второй базы относящимся к Уровню Первой базы.

Вроде, правильно объяснил.

Начал писать следующее:

// формируем массив с данными ВОРОНКИ
if($result_suppilo= mysql_query("SELECT * FROM tasot_suppilo WHERE id_cabinet = '".$myrow_cabinet['id']."' and id_parameter!='0' ORDER BY drag")) {
$ff_suppilo = mysql_num_rows($result_suppilo);
if(mysql_num_rows($result_suppilo)) {

while($data_suppilo = mysql_fetch_assoc($result_suppilo)) {
$suppilo_list[] = $data_suppilo;
}
}
else {$error = "<div class='alert alert-error'><b>Пусто!</b> - чтобы данная функция заработала нужно добавить <a href=tools.php?p=channels>источники трафика</a>.</div>";}
}
// формируем массив с данными СТАТУСЫ
//if($result_status= mysql_query("SELECT * FROM `status` WHERE id_cabinet = '".$myrow_cabinet['id']."' ORDER BY drag")) {
//$ff_suppilo = mysql_num_rows($result_status);
//  if(mysql_num_rows($result_status)) {

//      while($data_status = mysql_fetch_assoc($result_status)) {
//          $status_list[] = $data_status;
//      }
//  }
//  else {$error = "<div class='alert alert-error'><b>Пусто!</b> - чтобы данная функция заработала нужно добавить <a href=tools.php?p=channels>источники трафика</a>.</div>";}
//}
// формируем массив с данными ЛИДЫ
//if($result_lead= mysql_query("SELECT * FROM `lids` WHERE id_cabinet = '".$myrow_cabinet['id']."'")) {
//$ff_lead = mysql_num_rows($result_lead);
//  if(mysql_num_rows($result_lead)) {

//      while($data_lead = mysql_fetch_assoc($result_lead)) {
//          $lead_list[] = $data_lead;
//      }
//  }
//  else {$error = "<div class='alert alert-error'><b>Пусто!</b> - чтобы данная функция заработала нужно добавить <a href=tools.php?p=channels>источники трафика</a>.</div>";}
//}

$m=110;
foreach($suppilo_list as $suppilo_value) {

$result_status= mysql_query("SELECT * FROM status WHERE funnel = '$suppilo_value[id_parameter]' and id_cabinet = '".$myrow_cabinet['id']."'");
$ff_suppilo = mysql_num_rows($result_status);

while($data_status = mysql_fetch_assoc($result_status)) {
$str .= "status = ".$data_status['id_parameter']." or ";
$options = substr_replace($str, '', strrpos($str, ' or '));

$result_lead= mysql_query("SELECT * FROM lids WHERE ($options) and id_cabinet = '".$myrow_cabinet['id']."'");
$ff_lead = mysql_num_rows($result_lead);
}
                                ?>
                                    <div class="conv conv-status" style="background-color: <?=$suppilo_value['background_color'] ?> !important;width:<?=$m=$m-10;?>%;"><?=$ff_lead ?> <sup>/ 100%</sup></div>

                                <?

                                } 
                                ?>

Немного поковырял, выводит правильно только по первому УРОВНЮ, все остальное считает непарвильно... Подскажите, что делаю не так...

Ответы

▲ 1

Вы все делаете не так (с);

  1. Используете mysql_*. Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL.
  2. Выполняете запросы в цикле.
  3. Путаетесь в названиях полей и кавычках.

Будем полагаться на то, что структура базы у вас нормальная, и тогда запрос (он один!) будет выглядеть примерно так:

select ts.id, count(*) as ff_lead
from tasot_suppilo ts
  join status st on ts.id_parameter = st.funnel and st.id_cabinet = :idcabinet
  join lids l on st.id_status = l.status and l.id_cabinet = :idcabinet
where 
    ts.id_cabinet = :idcabinet
and ts.id_parameter <> 0
group by ts.id

З.Ы. Чтоб было проще вам помочь, создайте тестовый пример ваших данных на http://sqlfiddle.com