Diskuze: Výpis rozvrhu do HTML tabulky v PHP
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Nejsem si jisty, zda uplne chapu, v cem je problem. Mozna obrazek predtim, potom. Vubec, cely kod mas takovy divny, ze zvazuji, zda by nebylo lepsi pouzit google kalendar? Program pro cteni, editaci.
Spojeni ujizdeni casu nedava smysl. Kdyz delas skolni rozvrh, tak osa x ma 1,
2, 3, 4... osa y ma po, ut, st, ct, pa. Potrebujes docilit toho, aby mezi 1:00,
3:00, 4:00, 7:00 nebyly volne sloupce?
//$timetable[0][0+$i] = $date;
$timetable[0][] = $date; // uloz cas na posledni volnou polozku
$timetable[0][$date] = $date; // uloz to podle datumu
// oboje pocita to ale s tim, ze to z databaze mas uz serazene podle casu, ORDER
BY cas ASC
// mimochodem, pokud je to cas, tak bych to nazval $time a ne $date
Ja bych pro rozvrh volil tabulku
x, y, text
0, 0, text
0, 1, text - a pri vypise doplnoval hodinu a den
day, time_start, text
0, 1:00, text
0, 4:00, text
Hlavne, kdyz chces data ziskat, tak staci 1 SELECT.
SELECT x, y, text FROM rozvrh ORDER BY y ASC
Pro zjednoduseni mozna jeste druhy, seznam vsech rozdilnych casu z tabulky
DISTINCT SELECT x FROM rozvrh ORDER BY x ASC
Děkuji, z půlky je můj problém vyřešen. Teď je tu ještě ten
problém, že se v poli řadí aktivity automaticky za sebou a ne podle časů.
Tím pádem se tak vypisují i do rozvrhu. Je nějaká možnost, jak zařídit,
aby se aktivity vypisovaly přímo k jejich časům?
Například, aktivita neděleden2 je od 4:00 a druhá aktivita neděleden2 je od
6:00 (viz obrázek databáze), ale v rozvrhu jsou od 1:00 a od 2:00 (viz
rozvrh).
Toho seřazení docílíš pomocí ORDER BY, jak psal Peter výše.
//$timetable[0][0+$i] = $date;
$timetable[0][] = $date; // uloz cas na posledni volnou polozku
$timetable[0][$date] = $date; // uloz to podle datumu
Prvni radek, tos tam mel. Druhy radek je pridani na konec. dyz to seradis podle
casu, tak to bude, jak ted mas na obrazku. Treti radek je ukladani podle casu.
Jinymi slovy, pokud jsi to prepsal na db strukturu
id, x, y, texty, pak by tam melo byt
$query = "SELECT y, x, text FROM tabulka ORDER BY y ASC, x DESC"; // y je den v tydnu, x je hodina
...
while ($row = mysqli_fetch_assoc($result)!==false)
{
list ($y, $x, $text) = $row;
$timetable[$y][$x] = $text;
...
Ja osobne bych tam dal fakt x,y cislovane 0,1,2,3... Nebo kompletni datetime rok-mesic-den hodina:minuta a z nej to pak separoval. Nektere rozvrhy se delaji treba jen pro konkretni tyden.
A nebo bych to resil jeste dvema tabulkami
id, den
1, pondeli
...
id, hodina
1, 8:00
...
id, x, y, id_den, id_hodina, text
1, 0, 0, 1, 1, telocvik
SELECT x, y, den, hodina
FROM rozvrhy a
LEFT JOIN dny b ON b.id_den=a.id_den
LEFT JOIN hodiny c ON c.id_hodina=a.id_hodina
ORDER BY y ASC, x ASC
Jestli to spravne chapu, tak jeho problem je nyni, ze mu to nudlickuje za
sebou. Cili, nejspis tam ma kod
$tab[$radek][] = $text;
1 2 3
1 4 5 a potrebuje to mit ve spravnem sloupci
1 2 3 x x
1 x x 4 5
Jinymi slovy, je linej premyslet
SELECT x, y, den, hodina
SELECT a.x, a.y, b.den, c.hodina, a.text
Mozna lepe pro pochopeni, si tam dej jmena tabulek; pri vice tabulkach by ten
povodni zapis mohl vypsat sql error, protoze by mohly byt 2 sloupce stejne
pojmenovane
Zobrazeno 10 zpráv z 10.