Добрый вечер!
Создаю представление, выводящее общую статистику продаж.
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>
3
Сообщений в теме: 5
#1
Отправлено 20 Март 2012 - 21:23
#2
Отправлено 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
Отправлено 21 Март 2012 - 13:53
Большое спасибо!
В Вашей документации по представлениям искомого не нашёл.
Подскажите, пожалуйста, как мне в данном представлении вывести окно для ввода даты и, после выбора, подставлять её в запрос ("b.f77 >= '2012-03-01 00:00:00'")?
В Вашей документации по представлениям искомого не нашёл.
Подскажите, пожалуйста, как мне в данном представлении вывести окно для ввода даты и, после выбора, подставлять её в запрос ("b.f77 >= '2012-03-01 00:00:00'")?
#4
Отправлено 21 Март 2012 - 14:12
Советую посмотреть код стандартных представлений, там это все есть, в том числе и примеры которые я выше вам давал. В документации действительно далеко не все написано. Можете прям взять готовый код и модифицировать его под ваши задачи.
#5
Отправлено 21 Март 2012 - 14:55
Внимательно посмотрел в стандартной конфигурации, удалось перенести с первого раза Спасибо, думал будет сложнее!
Подскажите, пожалуйста, ещё один непонятный момент. В моём запросе есть условие: "WHERE (b.f67='Доставлен' OR b.f67='Отправлен')". Требуется для каждого из этих условий вывести кол-во продаж.
Т.е. сейчас массив содержит:
Название | Кол-во со статусом "Доставлен И Отправлен"
а нужно
Название | Кол-во со статусом "Доставлен" | Кол-во со статусом "Отправлен"
Подскажите, пожалуйста, ещё один непонятный момент. В моём запросе есть условие: "WHERE (b.f67='Доставлен' OR b.f67='Отправлен')". Требуется для каждого из этих условий вывести кол-во продаж.
Т.е. сейчас массив содержит:
Название | Кол-во со статусом "Доставлен И Отправлен"
а нужно
Название | Кол-во со статусом "Доставлен" | Кол-во со статусом "Отправлен"
#6
Отправлено 21 Март 2012 - 15:02
Способов можно найти множество, это уже не относится к документации, а скорее к логике и умению самого программиста находить оптимальное решение. Простого варианта здесь действительно нет, скорее всего придется составлять два отдельных запроса и комбинировать запись в итоговый массив.
Количество пользователей, читающих эту тему: 2
0 пользователей, 2 гостей, 0 анонимных