| Autor | Zpráva | ||
|---|---|---|---|
| Andrej.B Profil |
#1 · Zasláno: 5. 12. 2021, 19:28:34
Zdravim,
potrebujem vypisat tyzden z datumu, ktory si generujem po Selecte z db. $datum_check = $row_datum_all['Datum'];
$datumchange = date("d.m.Y", strtotime($datum_check));
$date = new DateTime($datumchange);
$week = $date->format("W");Pri vypise by som potreboval pri kazdom novom tyzdni, napisat, co je to za tyzden, vypisat datumy a dat novy riadok. Cize 46 tyzden - 15.11.2021, 16.11.2021<br> 47 tyzden - 23.11.2021, 25.11.2021<br> 48 tyzden - 3.12.2021<br> atd. Ako na logiku toho vypisu? Dakujem |
||
| anonym_ Profil * |
#2 · Zasláno: 5. 12. 2021, 19:37:55
|
||
| Andrej.B Profil |
#3 · Zasláno: 6. 12. 2021, 08:39:57
Diky,
zatial to mam takto: SELECT WEEK(Datum) as week, YEAR(Datum) as year FROM plan Group BY WEEK(Datum), YEAR(Datum) Order By YEAR(Datum), WEEK(Datum) while ($row_datum_all = $check_datum_all->fetch_array())
{
$year = $row_datum_all['year'];
$week = $row_datum_all['week'];
$pamet = '';
$pamet2 = '';
if ($week != $pamet)
{
$pamet = $week;
echo "<b>$pamet</b><br>";
}
}
46 47 48 49 50 51 1 5 Ako do toho este zapracovat ten rok, aby to ukazovalo takto? 2021 46 47 48 49 50 51 2022 1 5 |
||
| anonym_ Profil * |
#4 · Zasláno: 6. 12. 2021, 09:12:21
Andrej.B:
„Ako do toho este zapracovat ten rok, aby to ukazovalo takto?“ Úplně stejně, jako se pracuje s tím týdnem. Zkus se nad tím prosím trochu zamyslet. Celý ten okopírovaný kód z FAQ má 16 řádků, zkus je pochopit, co dělají a pak ty 3 řádky přidáš snadno sám. |
||
| blaaablaaa Profil |
Andrej.B:
A ten skript ti aktuálně dělá to, co chceš? Podle ukázky ti jen vypíše týdny, ale už nevytahuje jednotlivé datumy, jak jsi chtěl v zadání. Navíc v tvém skriptu je následující část nesmyslná ($pamet u tebe bude vždy prázdný string, ta inicializace proměnné patří mimo cyklus). $pamet = '';
if ($week != $pamet) {..} |
||
| Andrej.B Profil |
#6 · Zasláno: 6. 12. 2021, 10:03:46
blaaablaaa:
> A ten skript ti aktuálně dělá to, co chceš? Podle ukázky ti jen vypíše týdny, ale už nevytahuje jednotlivé datumy, jak jsi chtěl v zadání. > > Navíc v tvém skriptu je následující část nesmyslná ($pamet u tebe bude vždy prázdný string, ta inicializace proměnné patří mimo cyklus). Tak daleko som nepresiel. Chcel som tie tyzdne najskor, ze to bude v dalsom kroku v pohode, ale nieje. Pozeram, ze to musim najskor prejst ako rok... $q = "
SELECT WEEK(Datum) as week, YEAR(Datum) as year, Datum
FROM plan
Group BY WEEK(Datum), YEAR(Datum)
Order By YEAR(Datum), WEEK(Datum)
";
$check_datum_all = $conn->query($q);
echo $q.'<br>';
$pamet = '';
$pamet2 = '';
while ($row_datum_all = $check_datum_all->fetch_array())
{
$datum_check = $row_datum_all['Datum'];
$datumchange = date("d.m.Y", strtotime($datum_check));
$year = $row_datum_all['year'];
$week = $row_datum_all['week'];
if ($year != $pamet)
{
$pamet = $year;
echo "<b>$pamet</b><br>";
}
} Pravdepodobne nejako vnorene az k tym dnom? While year echo rok While week echo week While day echo day Ale takto v jednom mi to pride, ze musim mat 3 krat Select na DB, podla year, week a nakoniec day. Alebo to zle chapem. A nakoniec poskladat year 2021 week 46 day 2021-11-16 week 47 2021-11-22 2021-11-23 week 48 2021-11-29 2021-11-30 2021-12-04 week49 Atd 50 51 year 2022 1 atd 5 2022-02-01 prilis tazke na mna. |
||
| blaaablaaa Profil |
Nedoporučuji používat v dotazech klíčová slova jako názvy položek (year, week, ...), taky není dobré míchat češtinu a angličtinu, rozhodni se pro jedno a to používej. V kódu správně odsazuj (nebo to nech na IDE - které ti samo kód naformátuje).
Není třeba GROUPovat - chceš vypsat všechny (stačí si dotaz spustit v nějakém GUI - adminer/phpmyadmin/..., abys viděl výsledek). Taky není třeba řadit podle roku a týdne, seřaď to přímo podle data. $q = "SELECT WEEK(Datum) AS plan_week, YEAR(Datum) AS plan_year, Datum AS plan_date FROM plan ORDER BY plan_date"; V PHP pak stačí jeden cyklus: $year_actual = null; //tady si ulozis aktualni rok v cyklu
$week_actual = null; //tady si ulozis aktualni tyden v cyklu
while ( $row_datum_all = $check_datum_all->fetch_array() )
{
$date_change = date("d.m.Y", strtotime($row_datum_all['plan_date']));
$year = $row_datum_all['plan_year'];
$week = $row_datum_all['plan_week'];
if ( $year !== $year_actual )
{
if ( $year_actual )
{
echo '<br>'; //radek nad rokem, ale pouze u 2. a dalsiho roku ve vypise
}
echo "<b>$year</b><br>";
$year_actual = $year;
}
if ( $week !== $week_actual )
{
echo "<b>$week</b><br>";
$week_actual = $week;
}
echo $date_change.'<br>';
} |
||
| anonym_ Profil * |
#8 · Zasláno: 6. 12. 2021, 10:34:55
Andrej.B:
„Ale takto v jednom mi to pride, ze musim mat 3 krat Select na DB, podla year, week a nakoniec day. Alebo to zle chapem.“ Ne, bude tam jeden dotaz na DB, jeden cyklus a budeš si pamatovat a porovnávat 3 různé proměnné (v ukázkovém kódu je jedna nazvaná $pamet. Ty budeš mít $lastYear, $lastWeek, $lastDay a porovnávat s rokem/týdnem/dnem, který má aktuálně procházený řádek z databáze. Podle toho se rozhodneš, jestli (a jakou) hlavičku vypíšeš, nebo jestli vypíšeš jen ten záznam.
|
||
| Andrej.B Profil |
Toto je jedine co ma napadlo, na 3 krat select.
$q_year = "
SELECT YEAR(Datum) as year
FROM plan
Group BY YEAR(Datum)
Order By YEAR(Datum)
";
$check_datum_year = $conn->query($q_year);
//echo $q_year.'<br>';
while ($row_datum_year = $check_datum_year->fetch_array())
{
echo $row_datum_year['year'];
echo '<br>';
$q_week =
"
SELECT WEEK(Datum) as week
FROM plan
WHERE YEAR(Datum) = '".$row_datum_year['year']."'
Group BY WEEK(Datum)
Order By WEEK(Datum)
";
$check_datum_week = $conn->query($q_week);
//echo $q_week.'<br>';
while ($row_datum_week = $check_datum_week->fetch_array())
{
echo $row_datum_week['week'];
echo '<br>';
$q_day =
"
SELECT Datum as day
FROM plan
WHERE WEEK(Datum) = '".$row_datum_week['week']."'
Group BY day
Order By day
";
$check_datum_day = $conn->query($q_day);
//echo $q_day.'<br>';
while ($row_datum_day = $check_datum_day->fetch_array())
{
echo $row_datum_day['day'];
echo '<br>';
}
}
}uf pozeram, ze tu pribudli prispevky. Idem pozriet, dakujem. |
||
| Andrej.B Profil |
#10 · Zasláno: 6. 12. 2021, 11:54:47
Vypada to super. Dakujem.
Ak sa to dobre pochopil, tak v cykle ide vzdy: cyklus plan_year plan_week plan_date 1 2021 46 2021-11-16 2 2021 47 2021-11-22 3 2021 47 2021-11-23 4 2021 47 2021-11-24 5 2021 47 2021-11-25 6 2021 47 2021-11-26 7 2021 47 2021-11-27 8 2021 48 2021-11-28 9 2021 48 2021-11-29 Atd a vzdy pozrie, ci je splnena podmienka v tom IF a podla toho zobrazi.. |
||
| anonym_ Profil * |
#11 · Zasláno: 6. 12. 2021, 11:57:49
Andrej.B:
Ano. Ale to se dá snadno ověřit tím, že si ty proměnné před tou podmínkou vypíšeš a uvidíš, co v nich je/není. |
||
| Andrej.B Profil |
#12 · Zasláno: 6. 12. 2021, 12:27:01
anonym:
dava mi to konecne zmysel. je to aj cistejsie. Dal som si aj test na cas, ale priemer s 30 cyklov to mam 0.021s /1 select/ vs 0.025s /3 select/ . Super, blaaablaaa a anonym dakujem. Vzdy sa tu pomoze. |
||
| Andrej.B Profil |
#13 · Zasláno: 6. 12. 2021, 15:12:56
a ako to vypada v praxi. Diky este raz
|
||
| Andrej.B Profil |
#14 · Zasláno: 7. 12. 2021, 10:30:57
blaaablaaa:
„ $q = "SELECT WEEK(Datum) AS plan_week, YEAR(Datum) AS plan_year, Datum AS plan_date FROM plan ORDER BY plan_date"; “
Ak by to niekto potreboval, tak toto ukazuje start tyzdna ako Nedela. Staci si potom upravit WEEK(Datum) na WEEK(Datum,1) , kde 1 znamena pondelok ako zaciatok tyzdna, defualtne je to 0 a teda Nedela. |
||
|
Časová prodleva: 5 let
|
|||
0