|
Автор |
Съобщение |
Турист
Регистриран на: 27/02/2012 3:54 pm
Support:
Bonus: 46
Мнения: 337
|
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;
|
|
Върнете се в началото |
|
|
Tourist Defender
Регистриран на: 01/10/2005 6:33 pm
Support:
Bonus: 959
Мнения: 3010
|
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>";
}
| | |
Некво такова може би? |
|
Върнете се в началото |
|
|
Турист
Регистриран на: 27/02/2012 3:54 pm
Support:
Bonus: 46
Мнения: 337
|
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 запис, което е странно? |
|
Върнете се в началото |
|
|
Активен
Регистриран на: 11/06/2012 8:07 pm
Support:
Bonus: 321
Мнения: 1512
|
30/09/2019 12:55 pm
|
|
|
Ако dump-неш $storage_array веднага след while цикъла, виждаш ли всички данни правилно?
|
|
Върнете се в началото |
|
|
Турист
Регистриран на: 27/02/2012 3:54 pm
Support:
Bonus: 46
Мнения: 337
|
30/09/2019 3:20 pm
|
|
|
anonimen написа: | Ако dump-неш $storage_array веднага след while цикъла, виждаш ли всички данни правилно? |
Не, извежда само 3 резултата - вчера го дебъгнах точно така, й за това писах че го имам като проблем.
Тоест самата заявка явно създава проблем, защото при изпълнение в PMA също изважда само три резултата. Може би не трябва да групирам й месеца? |
|
Върнете се в началото |
|
|
Нов
Регистриран на: 30/09/2019 2:46 pm
Support:
Bonus: 0
Мнения: 2
|
30/09/2019 4:15 pm
|
|
|
Ще помогне ако научиш SQL.
|
|
Върнете се в началото |
|
|
Нов
Регистриран на: 30/09/2019 4:16 pm
Support:
Bonus: 0
Мнения: 1
|
30/09/2019 4:18 pm
|
|
|
Ако научиш SQL ще помогне. Но във форум в който глупостта е издигната в култ подобни съвети не се толерират, нали?
|
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 772
|
30/09/2019 7:03 pm
|
|
|
Не трябва, защото ако имаш от 2017, 2018 и 2019 записи, и за трите години групираш по месец, ще ти изведе точно 3 записа.
|
|
Върнете се в началото |
|
|
Турист
Регистриран на: 27/02/2012 3:54 pm
Support:
Bonus: 46
Мнения: 337
|
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 път |
|
Върнете се в началото |
|
|
Потребител
Регистриран на: 24/03/2013 3:23 pm
Support:
Bonus: 114
Мнения: 772
|
30/09/2019 7:10 pm
|
|
|
Ама ти, ако искаш всички записи, не трябва да групираш по нищо или аз не разбирам какво точно се опитваш да направиш.
Дай примерни 20 записа с различни данни (година, месец, ден, ЕИК и т.н.) и кажи какво очакваш като резултат.
|
|
Върнете се в началото |
|
|
|