Извеждане, групиране на резултати по - години, месеци, данни

C++ JAVA
User avatar
Ticketa
Турист
Турист
Posts: 393
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Извеждане, групиране на резултати по - години, месеци, данни

Post by Ticketa » Wed Sep 25, 2019 9:40 pm

Привет, опитвам се да изведа резултати(само за наличните месеци) в този ред:
- 2019
-- 03
---- издадена фактура №
---- издадена фактура №
---- общо за месеца
-- 08
---- издадена фактура №
---- издадена фактура №
---- издадена фактура №
---- издадена фактура №
---- общо за месеца
-- 09
---- издадена фактура №
---- издадена фактура №
---- издадена фактура №
---- общо за месеца

Стигнах до тук:
- 2019
-- 03
-- 08
-- 09

[php]
<?php
$query = "SELECT * FROM `costs_expense` group by year, month";
$result = $mysqli->query($query);
$storage_array = array();
while($row = $result->fetch_assoc()) {
$year = $row['year'];
$month = $row['month'];
$storage_array[$year][] = $month;
}
foreach ($storage_array as $year => $month_array){
echo "<ul class='year'><li><a>{$year}</a>";
foreach ($month_array as $month){
echo "<ul class='months'><li><a>{$month}</a></li></ul>";

}
echo "</li></ul>";
}
?>
[/php]

Само не успявам да ги изведа данните за всеки месец, например № фактура или ЕИК на фирма. Предложение от някой турист?

Таблица:
[sql]


CREATE TABLE `costs_expense` (
`costs_id` int(255) NOT NULL,
`data` datetime DEFAULT NULL,
`year` int(255) NOT NULL,
`month` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`contractor_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`eik` varchar(15) COLLATE utf8_unicode_ci DEFAULT NULL,
`vat` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`invoice` int(10) DEFAULT NULL,
`description` text COLLATE utf8_unicode_ci DEFAULT NULL,
`cash_or_bank` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT '0',
`cat_id` int(255) DEFAULT NULL,
`amount` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
[/sql]

fidinemo
Нов
Нов
Posts: 1
Joined: Thu Sep 26, 2019 2:51 am

Post by fidinemo » Thu Sep 26, 2019 2:54 am

Като начало, би било полезно да научите sql.

User avatar
deam0n
Web-tourist
Web-tourist
Posts: 3015
Joined: Sat Oct 01, 2005 4:33 pm
Answers: 204
Location: Шопландия
Contact:

Post by deam0n » Thu Sep 26, 2019 9:06 am

Code: Select all

while&#40;$row = $result->fetch_assoc&#40;&#41;&#41; &#123;
   $year = $row&#91;'year'&#93;;
   $month = $row&#91;'month'&#93;;
   $eik = $row&#91;'eik'&#93;;
   $storage_array&#91;$year&#93;&#91;$month&#93;&#91;&#93; = $eik;
&#125;




foreach &#40;$storage_array as $year&#41;&#123;

   echo "<ul class='year'><li><a>&#123;$year&#125;</a>";

   foreach &#40;$year as $month&#41;&#123;

     echo "<ul class='months'><li><a>&#123;$month&#125;</a></li></ul>";
     
     echo "<ul class='eik'>";
     foreach&#40;$month as $eik&#41; &#123;
        echo "<li><a>&#123;$eik&#125;</a></li>";
    
    &#125; 
    echo "</ul>";
  
   &#125;

   echo "</li></ul>";

&#125;
Некво такова може би?

User avatar
Ticketa
Турист
Турист
Posts: 393
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Post by Ticketa » Sun Sep 29, 2019 3:32 pm

Не работи, аз тествах преди това. Чупи се кода.

Code: Select all

    Array
        Array
        123456789
        Array
        123456987
        Array
        123456879
Изчезва годината й месеца й на негово място пише Array

ЕДИТ:

Същност , реших проблема така:

Code: Select all

<?php
$query = "SELECT * FROM `costs_expense` group by year, month";
$result = $mysqli->query&#40;$query&#41;;
$storage_array = array&#40;&#41;;
while&#40;$row = $result->fetch_assoc&#40;&#41;&#41; &#123;
   $year = $row&#91;'year'&#93;;
   $month = $row&#91;'month'&#93;;
   $eik = $row&#91;'eik'&#93;;
   $storage_array&#91;$year&#93;&#91;$month&#93;&#91;&#93; = $row;
&#125;

foreach &#40;$storage_array as $year => $month_array&#41;&#123;
    echo "<ul class='year'><li><a>Година&#58; &#123;$year&#125;</a>";
    foreach &#40;$month_array as $month => $data_array&#41;&#123;
        echo "<ul class='months'><li><a>Месец&#58; &#123;$month&#125;</a></li></ul>";
        foreach&#40;$data_array as $byYearRow&#41; &#123;
            
            $resultCatx = $mysqli->query&#40;"SELECT contractor_name FROM `contractors` WHERE contra_id=".$byYearRow&#91;'contractor_id'&#93;.""&#41; or trigger_error&#40;"Query Failed! SQL&#58;  - Error&#58; ".mysqli_error&#40;&#41;, E_USER_ERROR&#41;;
            $rowCatx = $resultCatx->fetch_assoc&#40;&#41;;
            echo "<ul class='eik'><li><a>Фирма&#58; ".$rowCatx&#91;'contractor_name'&#93;.", ЕИК&#58; ".$byYearRow&#91;'eik'&#93;."</a></li></ul>";
        &#125;
   &#125;
   echo "</li></ul>";
&#125;
?>

Обаче, не работи отново коректно. Имам за всеки месец повече от 1 запис , обаче кода изважда само по 1 запис, което е странно?

User avatar
anonimen
Web-tourist
Web-tourist
Posts: 1534
Joined: Mon Jun 11, 2012 6:07 pm
Answers: 163
Location: Parse error: unexpected "}" in /home/index.php on line 26

Post by anonimen » Mon Sep 30, 2019 10:55 am

Ако dump-неш $storage_array веднага след while цикъла, виждаш ли всички данни правилно?

yikewe
Нов
Нов
Posts: 2
Joined: Mon Sep 30, 2019 12:46 pm

Post by yikewe » Mon Sep 30, 2019 12:48 pm

Много по-лесно ще е да научи SQL. Ама какво да се прави - в тоя форум глупостта е издигната на почит, а тоя пост ще бъде затрит щото не дава сдъвкано решение.

Айде дърпайте шаутера вече.

User avatar
Ticketa
Турист
Турист
Posts: 393
Joined: Mon Feb 27, 2012 1:54 pm
Answers: 23
Location: in /root
Contact:

Post by Ticketa » Mon Sep 30, 2019 1:20 pm

anonimen wrote:Ако dump-неш $storage_array веднага след while цикъла, виждаш ли всички данни правилно?
Не, извежда само 3 резултата - вчера го дебъгнах точно така, й за това писах че го имам като проблем.


Тоест самата заявка явно създава проблем, защото при изпълнение в PMA също изважда само три резултата. Може би не трябва да групирам й месеца?

yikewe
Нов
Нов
Posts: 2
Joined: Mon Sep 30, 2019 12:46 pm

Post by yikewe » Mon Sep 30, 2019 2:15 pm

Ще помогне ако научиш SQL.

rikedeyo
Нов
Нов
Posts: 1
Joined: Mon Sep 30, 2019 2:16 pm

Post by rikedeyo » Mon Sep 30, 2019 2:18 pm

Ако научиш SQL ще помогне.
Но във форум в който глупостта е издигната в култ подобни съвети не се толерират, нали?

User avatar
Revelation
Web-tourist
Web-tourist
Posts: 804
Joined: Sun Mar 24, 2013 1:23 pm
Answers: 57

Post by Revelation » Mon Sep 30, 2019 5:03 pm

Не трябва, защото ако имаш от 2017, 2018 и 2019 записи, и за трите години групираш по месец, ще ти изведе точно 3 записа.

Post Reply