- Извеждане, групиране на резултати по - години, месеци, данни
WT форуми -> PHP MySQL ASP.NET -> Извеждане, групиране на резултати по - години, месеци, данни
Създайте нова тема Напишете отговор 
Автор Съобщение
Ticketa
Турист
Турист

Регистриран на: 27/02/2012 3:54 pm

Support: 23
Bonus: 46
Мнения: 334
Мнение 25/09/2019 11:40 pm     Извеждане, групиране на резултати по - години, месеци, данни Отговорете с цитат


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

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

PHP code:

<?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>";
}
?>


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

Таблица:
SQL code:



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;
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
deam0n
Tourist Defender

Регистриран на: 01/10/2005 6:33 pm

Support: 203
Bonus: 959
Мнения: 3008
Мнение 26/09/2019 11:06 am      Отговорете с цитат


while($row = $result->fetch_assoc()) {
   $year = $row['year'];
   $month = $row['month'];
   $eik = $row['eik'];
   $storage_array[$year][$month][] = $eik;
}




foreach ($storage_array as $year){

   echo "<ul class='year'><li><a>{$year}</a>";

   foreach ($year as $month){

     echo "<ul class='months'><li><a>{$month}</a></li></ul>";
     
     echo "<ul class='eik'>";
     foreach($month as $eik) {
        echo "<li><a>{$eik}</a></li>";
   
    }
    echo "</ul>";
 
   }

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

}


Некво такова може би?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение Посетете сайта на потребителя
Ticketa
Турист
Турист

Регистриран на: 27/02/2012 3:54 pm

Support: 23
Bonus: 46
Мнения: 334
Мнение 29/09/2019 5:32 pm      Отговорете с цитат


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

    Array
        Array
        123456789
        Array
        123456987
        Array
        123456879


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

ЕДИТ:

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


<?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'];
   $eik = $row['eik'];
   $storage_array[$year][$month][] = $row;
}

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



Обаче, не работи отново коректно. Имам за всеки месец повече от 1 запис , обаче кода изважда само по 1 запис, което е странно?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
anonimen
Активен
Активен

Регистриран на: 11/06/2012 8:07 pm

Support: 161
Bonus: 321
Мнения: 1510
Мнение 30/09/2019 12:55 pm      Отговорете с цитат


Ако dump-неш $storage_array веднага след while цикъла, виждаш ли всички данни правилно?
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Ticketa
Турист
Турист

Регистриран на: 27/02/2012 3:54 pm

Support: 23
Bonus: 46
Мнения: 334
Мнение 30/09/2019 3:20 pm      Отговорете с цитат


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

Не, извежда само 3 резултата - вчера го дебъгнах точно така, й за това писах че го имам като проблем.


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

Регистриран на: 30/09/2019 2:46 pm

Support: 0
Bonus: 0
Мнения: 2
Мнение 30/09/2019 4:15 pm      Отговорете с цитат


Ще помогне ако научиш SQL.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
rikedeyo
Нов
Нов

Регистриран на: 30/09/2019 4:16 pm

Support: 0
Bonus: 0
Мнения: 1
Мнение 30/09/2019 4:18 pm      Отговорете с цитат


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

Регистриран на: 24/03/2013 3:23 pm

Support: 57
Bonus: 114
Мнения: 764
Мнение 30/09/2019 7:03 pm      Отговорете с цитат


Не трябва, защото ако имаш от 2017, 2018 и 2019 записи, и за трите години групираш по месец, ще ти изведе точно 3 записа.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Ticketa
Турист
Турист

Регистриран на: 27/02/2012 3:54 pm

Support: 23
Bonus: 46
Мнения: 334
Мнение 30/09/2019 7:04 pm      Отговорете с цитат


С подобна заявка
SQL code:
SELECT eik, count(*) as cnt,CONCAT(MONTH(data),'/', YEAR(data)) as day from costs_expense group by day 


Ми изкарва;


eik   cnt   day    
123456789   10    3/2019
123456799   1    8/2019
123456889   7    9/2019
 


Тоест, март месец има 10 записа(които не ги изкарва , а само 1 еик) , август има 1 запис, септември има 7 записа

Реших го така:
PHP code:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

$query = "SELECT * FROM `costs_expense` ORDER BY `data` DESC";
$result = $mysqli->query($query);
$storage_array = array();
while($row = $result->fetch_assoc()) {
$year = $row['year'];
$month = $row['month'];
$eik = $row['eik'];
$storage_array[$year][$month][] = $row;
}
foreach ($storage_array as $year => $month_array){
echo "<ul class='year'><li><a>Година: {$year}</a>";
foreach ($month_array as $month => $data_array){
echo "<ul class='months'><li><a>Месец: {$month}</a></li></ul>";
foreach($data_array as $byYearRow) {

$resultCatx = $mysqli->query("SELECT contractor_name FROM `contractors` WHERE contra_id=".$byYearRow['contractor_id']."") or trigger_error("Query Failed! SQL: - Error: ".mysqli_error(), E_USER_ERROR);
$rowCatx = $resultCatx->fetch_assoc();
echo "<ul class='eik'><li><a>Фирма: ".$rowCatx['contractor_name'].", ЕИК: ".$byYearRow['eik']."</a></li></ul>";
}
}
echo "</li></ul>";
}
?>


Последната промяна е направена от Ticketa на 30/09/2019 7:24 pm; мнението е било променяно общо 1 път
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Revelation
Потребител
Потребител

Регистриран на: 24/03/2013 3:23 pm

Support: 57
Bonus: 114
Мнения: 764
Мнение 30/09/2019 7:10 pm      Отговорете с цитат


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

Дай примерни 20 записа с различни данни (година, месец, ден, ЕИК и т.н.) и кажи какво очакваш като резултат.
Върнете се в началото
Вижте профила на потребителя Изпратете лично съобщение
Покажи мнения от преди:    
Създайте нова тема   Напишете отговор    web-tourist.net Форуми -> PHP MySQL ASP.NET Часовете са според зоната GMT + 2 Часа
Страница 1 от 1


 
Идете на:  
Не Можете да пускате нови теми
Не Можете да отговаряте на темите
Не Можете да променяте съобщенията си
Не Можете да изтривате съобщенията си
Не Можете да гласувате в анкети