Корректное формирование массива из БД

kub

Новичок
Добрый день. Помогите составить правильное условие для формирования корректного массива.
В результате запроса написан ниже, получаю данные из БД
PHP:
src 	disposition 	count(*)
370 	ANSWERED    4
370 	FAILED    2
370 	NO ANSWER    4
375 	ANSWERED    28
375 	BUSY    7
375 	FAILED    2
375 	NO ANSWER    3
В итоге в массиве $con_busy_m первое значение будет 7, что неверно должно быть ноль.
Необходимо доп условие, но что-то я не соображу на что опираться при составлении?!

PHP:
$query_day = "SELECT src, disposition, count(*)
        FROM {$userstable}
        where calldate > CURDATE( )
        AND `src` BETWEEN '370' AND '379'
        AND `dst` NOT LIKE '___'
        AND `lastapp` = 'DIAL'
        GROUP BY src, disposition";

$res_day = mysql_query($query_day) or die(mysql_error());

while($row_d = mysql_fetch_assoc($res_day))
{
        if ($row_d["disposition"]== "ANSWERED") {
                $nomer_d[]=$row_d["src"];
                $con_ans_d[]=$row_d["count(*)"];
                }
        if ($row_d["disposition"]== "NO ANSWER") {
                $con_noans_d[]=$row_d["count(*)"];
                }
        if ($row_d["disposition"]== "BUSY") {
                $con_busy_d[]=$row_d["count(*)"];

                }
        if ($row_d["disposition"]== "FAILED") {
                $con_fail_d[]=$row_d["count(*)"];
                }
}


$x=0;
while ($x<10)
{
  $con_vse_d=$con_ans_d[$x]+$con_noans_d[$x]+$con_busy_d[$x]+$con_fail_d[$x];

  echo "<tr><td>{$nomer_d[$x]}</td><td>{$con_ans_d[$x]}</td><td>{$con_noans_d[$x]}</td><td>{$con_busy_d[$x]}</td><td>{$con_fail_d[$x]}</td><td></td></tr>";
   $x++; // Увеличение счетчика
  }
 

kub

Новичок
поправка, хочу ноль :)
т.е у 370 нет строк со статусом "BUSY", поэтому в массив хочу вставить "0"
 

Redjik

Джедай-мастер
Это что за содомия?
PHP:
        AND `src` LIKE '37_'
        AND `dst` NOT LIKE '___'
        AND `lastapp` = 'DIAL'
 

kub

Новичок
1. в поле src только строки начинаюшиеся на 37
2. в поле dst не должно быть трёхзначных значений
3. только статус 'dial'
 

Redjik

Джедай-мастер
1) с числами не пробовал?
2) открой для себя LENGTH
 

kub

Новичок
1) с числами не пробовал?
2) открой для себя LENGTH
Спасибо за критику и замечания.
1. переделал так
PHP:
AND `src` BETWEEN '370' AND '379'
2. посмотрю и постараюсь избавится от LIKE

а по заданному мной вопросу не подскажите
 

С.

Продвинутый новичок
Отсутствие строки в результате и означает ноль. Никак ее туда без извращений не добавить. Если очень хочется этот ноль явно увидеть, то надо писать:
PHP:
(int)$con_busy_d[$x]
или
PHP:
number_format($con_busy_d[$x])
 

baev

‹°°¬•
Команда форума
С., я, наверное, что-то не так понял, но при чём тут «$con_busy_d»?

Топикстартер писал про «в массиве $con_busy_m первое значение будет 7, что неверно должно быть ноль».
Присваивание нуля переменной — элементарная задача, не требующая «извращений». Разве нет?
 

С.

Продвинутый новичок
baev, он хочет, чтобы из несуществующих строк в базе формировалась "предполагамая" группа с суммой 0.
 

kub

Новичок
Переделал под свои желания:

PHP:
while($row = mysql_fetch_assoc($res))
{
        $a=370;
        while ($a<380)  {

        if ($row["src"]== "$a") {
                if ($row["disposition"]== "ANSWERED") {
                        ${'mon'.$a}[0]=$row["count(*)"];
                        }
                if ($row["disposition"]== "NO ANSWER") {
                        ${'mon'.$a}[1]=$row["count(*)"];
                        }
                if ($row["disposition"]== "BUSY") {
                        ${'mon'.$a}[2]=$row["count(*)"];
                        }
                if ($row["disposition"]== "FAILED") {
                        ${'mon'.$a}[3]=$row["count(*)"];
                        }
        }
        $a++;
        }
}

$x=370;
while ($x<380)
{
  $vse_mon=${'mon'.$x}[0]+${'mon'.$x}[1]+${'mon'.$x}[2]+${'mon'.$x}[3];

  echo "<tr><td>$x</td><td>{${'mon'.$x}['0']}</td><td>{${'mon'.$x}['1']}</td><td>{${'mon'.$x}['2']}</td><td>{${'mon'.$x}['3']}</td><td>$vse_mon</td></tr>";
 $x++; // Увеличение счетчика
}
Скажите насколько оно "элегантно" получилось?!
 
Сверху