@95_petya_95

Как правильно сформировать запрос и вывести данные в цикле?

Всем привет. Пытаюсь вывести процент отчисления по каждому уровню партнерки, но не получается. Вывод идет только по 1 уровню. Подскажите как исправить либо направьте в нужное русло. Спасибо.

66164ff490c6b679682795.png
Код вывода количества уровней и процентов
$countRefSystem = $pdo->query("SELECT COUNT(*) as c FROM `db_ref_system` GROUP BY `rs_type` ORDER BY c DESC LIMIT 1");
$count_level = $countRefSystem->fetchColumn();		
if($count_level > 0){
	$i = 1;
	while($i <= $count_level){
		$ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` GROUP BY `rs_type` ORDER BY `id` ASC");
		$ref_system->execute();
?>
  <div class="col-md-4 col-12 mb-lg-0 mb-4">
    <div class="fw-bold h5 mb-3">
      <?=$i;?>-й уровень</div>
    <?
	foreach($ref_system->fetchAll() as $ref){
	?>
      <div class="mb-4">
        <span class="text-muted fw-semibold"><?=$ref['rs_type']?></span>
        <div>
          <div class="d-flex align-items-center pt-2">
            <div class="progress w-100">
              <div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
            </div>
            <span class="ms-3 fw-bold text-warning"><?=$ref['rs_percent']?>%</span>
          </div>
        </div>
      </div>
      <?}?>
  </div>
  <?$i++;
	}}
  ?>


Итог..
661650282257a945644659.png
  • Вопрос задан
  • 143 просмотра
Решения вопроса 1
vhood
@vhood
Не забывайте отмечать решения
Если "в лоб":

1. Убираем группировку, никаких подгрупп база не выдаст, будет по 1 записи на "уровень"
- $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` GROUP BY `rs_type` ORDER BY `id` ASC");
+ $ref_system = $pdo->prepare("SELECT * FROM `db_ref_system` ORDER BY `id` ASC");


2. Фильтруем итоговый вывод в 3 массива и выводим их
<?php
$all = $ref_system->fetchAll();
$plc = array_filter($all, fn ($fields) => $fields['rs_type'] === 'plc');
$deposit = array_filter($all, fn ($fields) => $fields['rs_type'] === 'deposit');
$offer = array_filter($all, fn ($fields) => $fields['rs_type'] === 'offer');
?>
<?php foreach ([$plc, $deposit, $offer] as $level => $data): ?>
  <div class="col-md-4 col-12 mb-lg-0 mb-4">
    <div class="fw-bold h5 mb-3">
      <?= $level + 1 ?>-й уровень
    </div>
    <?php foreach($data as $ref) : ?>
    <div class="mb-4">
      <span class="text-muted fw-semibold"><?=$ref['rs_type']?></span>
      <div>
        <div class="d-flex align-items-center pt-2">
          <div class="progress w-100">
            <div class="progress-bar bg-warning" role="progressbar" style="width: 100%;" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
          </div>
          <span class="ms-3 fw-bold text-warning"><?=$ref['rs_percent']?>%</span>
        </div>
      </div>
    </div>
    <?php endforeach; ?>
  </div>
<?php endforeach; ?>
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mosesfender
@mosesfender
Меланхолик, параноик, падал с коек
Можно и с группировкой сделать. Даже гибчее получится. Тут в поле percents готовое выражение для explode по оси ординат для каждого типа.
SELECT
  drs.rs_type,
  GROUP_CONCAT(drs.rs_percent ORDER BY drs.rs_percent ASC) AS percents
FROM db_ref_system drs
GROUP BY drs.rs_type
ORDER BY drs.id
Ответ написан
Комментировать
alexei_new
@alexei_new
РАЗРАБОТКА ВЕБ-УТИЛИТ
Угу
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы