Перейти к содержимому


Вывод статистики продаж в представлении

представление

Сообщений в теме: 5

#1 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 20 Март 2012 - 21:23

Добрый вечер!

Создаю представление, выводящее общую статистику продаж.
SQL-запрос сформировал, результат вывода - массив вида:

(Название продукта) | (кол-во продаж)

При этом в отчёте почему-то выводится только первая строка массива. Подскажите, что делаю не так?

В подготовке данных:

$sqlQuery =
"SELECT c.f48, SUM(f76) AS outcome_sum FROM cb_data8 AS a
INNER JOIN cb_data7 AS b ON a.f73=b.id
INNER JOIN cb_data5 AS c ON a.f75=c.id
WHERE (b.f67='Доставлен' OR b.f67='Отправлен') AND b.f77 >= '2012-03-01 00:00:00'
GROUP BY c.f48";
$result = mysql_query($sqlQuery);
$row = mysql_fetch_array($result);
$smarty->assign('data', $row);

В отображении:

<table><tr>
{foreach from=$data item=prod name=count_values}
<td>{$prod}</td>
{/foreach}
</tr></table>

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Март 2012 - 09:17

Все правильно, вы заносите в массив только первую строку запроса, соответственно она и выводится. Советую почитать документацию по работе с MySQL в PHP, и нашу - по представлениям. Для считывания нескольких строк синтаксис такой:

$sqlQuery =
"SELECT c.f48 AS prod, SUM(f76) AS outcome_sum FROM cb_data8 AS a
INNER JOIN cb_data7 AS b ON a.f73=b.id
INNER JOIN cb_data5 AS c ON a.f75=c.id
WHERE (b.f67='Доставлен' OR b.f67='Отправлен') AND b.f77 >= '2012-03-01 00:00:00'
GROUP BY c.f48";
$result = mysql_query($sqlQuery);
while ($row = mysql_fetch_array($result))
{
   $lines[] = $row;
}
$smarty->assign('lines', $lines);

<table><tr>
{foreach from=$lines item=data}
<td>{$data.prod}</td>
<td>{$data.outcome_sum}</td>
{/foreach}
</tr></table>


#3 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 21 Март 2012 - 13:53

Большое спасибо!

В Вашей документации по представлениям искомого не нашёл.
Подскажите, пожалуйста, как мне в данном представлении вывести окно для ввода даты и, после выбора, подставлять её в запрос ("b.f77 >= '2012-03-01 00:00:00'")?

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Март 2012 - 14:12

Советую посмотреть код стандартных представлений, там это все есть, в том числе и примеры которые я выше вам давал. В документации действительно далеко не все написано. Можете прям взять готовый код и модифицировать его под ваши задачи.

#5 WhiteRussian

    Участник

  • Пользователи
  • PipPip
  • 13 сообщений

Отправлено 21 Март 2012 - 14:55

Внимательно посмотрел в стандартной конфигурации, удалось перенести с первого раза :) Спасибо, думал будет сложнее!

Подскажите, пожалуйста, ещё один непонятный момент. В моём запросе есть условие: "WHERE (b.f67='Доставлен' OR b.f67='Отправлен')". Требуется для каждого из этих условий вывести кол-во продаж.
Т.е. сейчас массив содержит:
Название | Кол-во со статусом "Доставлен И Отправлен"
а нужно
Название | Кол-во со статусом "Доставлен" | Кол-во со статусом "Отправлен"

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 21 Март 2012 - 15:02

Способов можно найти множество, это уже не относится к документации, а скорее к логике и умению самого программиста находить оптимальное решение. Простого варианта здесь действительно нет, скорее всего придется составлять два отдельных запроса и комбинировать запись в итоговый массив.





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных