Autor Zpráva
hondziiikh
Profil
Ahoj, řeším nový problém. Jak jsem již psal, zaměstnavatel není schopen žádné aplikace, která by vystavila směny na webu, tak jsem se do toho pustil sám.. No a k věci co mě trápí:
Mám v SQL tabulku zaměstnanci - třeba takhle:
  ID        date    smena   poznamka  zamestnanec
00455    1328310000  NULL      NULL      1
00456    1328310000  NULL      NULL      3
00457    1328310000  R(8-16)   pozn.     2
00458    1328569200  R(8-16)   NULL      1
00459    1328569200  NULL      NULL      2
00460    1328569200  NULL      NULL      3
00461    1328655600  R(8-16)   náhrada   2
00462    1328655600  R(8-16)   NULL      1
00463    1328655600  R(8-16)   NULL      3
ID je jasny, date je půlnoc toho dne, kdy má zam. směnu, směna je jen text. pole, to samé poznámka a zeměstnanec je jeho číslo. Data smyšlená :)
a já z toho potřebuji, aby mi to vypisovalo cca takovéto výsledky:
date        |smena(1)  |pozn(1)|zam(1)| smena(2)|pozn2    |zam(2)|smena(3)|pozn(3)|zam(3)
1328310000  |NULL      |NULL   | 1    | R(8-16) | pozn.   | 2    | NULL   | NULL  | 3
1328569200  |R(8-16)   |NULL   | 1    | NULL    | NULL    | 2    | NULL   | NULL  | 3
1328655600  |R(8-16)   |NULL   | 1    | R(8-16) | náhrada | 2    | R(8-16)| NULL  | 3
pro vysvětlení bude to <table> kde pod sebou pujdou jednotlie dny (tedy date) a ke každému datu zaměstnanci. Jenže nevím, kolik těch zam. bude.. Tak snad jsem to vysvětlil.
Má někdo nápad, jak to vytáhnout a srovnat tímto způsobem? Já to prozatím vyřešil načtením každého řádku zvlášť, ale to je přecijen 31 dotazů :) Díky za nápady
Str4wberry
Profil
Šel bych na to tak, že si při výpisu všech dat z SQL nejprve nastrkáš záznamy do pomocného pole, kde jako klíč použiješ datum, a dalším cyklem sestavíš tu tabulku.
hondziiikh
Profil
Takže výcuc z DB bude podle tohoto : SELECT * FROM `smeny`WHERE date BETWEEN $tentomesic AND $minulymesic ORDER BY `smeny`.`date` ASC
(ten between je pro výpis jen jednoho měsíce, což bude default náhled.. Dál to řeším kalendářem). Jen nevím, když do směn nebude přidáváno postupně zam 1, 2, 3, ... ale třeba 2, 1, 3,... tak aby to nepsalo cizí směny do jiného zam.. Čím ošetřit toto?
candiess
Profil
hondziiikh:
tak aby to nepsalo cizí směny do jiného zam.. Čím ošetřit toto?
To si seřaď v PHPčku, pomocí cyklu si udělej pole a jako klíč bude den, to pole b8ude mít další pole s klíčem směna aneb Vícerozměrná pole
panther
Profil
hondziiikh:
Jen nevím, když do směn nebude přidáváno postupně zam 1, 2, 3, ... ale třeba 2, 1, 3
můžeš řadit dle více kritérií, takže:
... ORDER BY `smeny`.`date` ASC, zamestnanec
hondziiikh
Profil
panther:
jj, dotaz už jsem vyřešil, teď bojuju s polema.. zatím prohrávám :-D pořád to ve výsledku je úplně jinak :)
hondziiikh
Profil
Tak jo, mám z toho hlavu jak škopek... z DB mi pomocí print_r() přichází ne jedno, ale několik polí... Asi takhle
Array ( [0] => 00000000094 [id] => 00000000094 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 001 [pracovnik] => 001 ) 
Array ( [0] => 00000000125 [id] => 00000000125 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 002 [pracovnik] => 002 ) 
Array ( [0] => 00000000156 [id] => 00000000156 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 003 [pracovnik] => 003 ) 
Array ( [0] => 00000000001 [id] => 00000000001 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 004 [pracovnik] => 004 ) 
Array ( [0] => 00000000187 [id] => 00000000187 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 005 [pracovnik] => 005 ) 
Array ( [0] => 00000000063 [id] => 00000000063 [1] => 1325372400 [date] => 1325372400 [2] => D(7-19) [smena] => D(7-19) [3] => Fronta [poznamka] => Fronta [4] => 006 [pracovnik] => 006 ) 
Array ( [0] => 00000000032 [id] => 00000000032 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 007 [pracovnik] => 007 ) 
Array ( [0] => 00000000218 [id] => 00000000218 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 008 [pracovnik] => 008 ) 
Array ( [0] => 00000000095 [id] => 00000000095 [1] => 1325458800 [date] => 1325458800 [2] => R(12-20) [smena] => R(12-20) [3] => Fronta [poznamka] => Fronta [4] => 001 [pracovnik] => 001 ) 
Array ( [0] => 00000000126 [id] => 00000000126 [1] => 1325458800 [date] => 1325458800 [2] => R(8-16) [smena] => R(8-16) [3] => [poznamka] => [4] => 002 [pracovnik] => 002 )

A já nevím, co s nima dál :( A netuším, jak udělat aby mi nepřicházela hodnota dvakrát, jednou jako klíč 0 a jednou jako id např.. Pak vůbec nevím jak místo klíče nastavit hodnotu (ten datum).. Tohle je pro velkej mozek, na to nemám kapacitu :( :-D Prosím pomoc
Str4wberry
Profil
na to nemám kapacitu

Spíš neznáš základy v používání PHP a databáze. Dej sem kód, ke kterému jsi došel.
hondziiikh
Profil
nn, zaklady jsou, jen prostě pole nejsou má silná stránka. Já si to vždycky musím malovat na papír :)
jinka úspěch, polí mi vrací DB sice stále milion, ale klíč > hodnota už jen jednou :)

Array ( [0] => 00000000094 [id] => 00000000094 [1] => 1325372400 [date] => 1325372400 [2] => [smena] => [3] => [poznamka] => [4] => 001 [pracovnik] => 001 )
nyní
Array ( [id] => 00000000094 [date] => 1325372400 [smena] => [poznamka] => [pracovnik] => 001 ) 
Array ( [id] => 00000000125 [date] => 1325372400 [smena] => [poznamka] => [pracovnik] => 002 )
a s tím už by se mělo dát do pole pracovat.. :)
Nikdy jsem nezkoumal, co vlastně z db přichází, já si vždy jen deklaroval proměnné a používal. A dnes jsem poprvé použil print_r() a díky tomu zjišťuji, že díky fetch_array dostávám od DB 2x tolik dat jen kvůli odlišnému key napč [0] a [id].. ještě vyzkouším, než se znovu zeptám na radu :)
Zatím díky


Tak stejne mi to nejde :) tady mám výcuc, který mi to vyčte už správně, a teď mám
$pocZam= mySql_Query("SELECT DISTINCT pracovnik FROM smeny"); //sem ještě budu omezovat měsícem, kdyby někoho vyhodili nebo nabrali
$pocZam=mySql_Num_Rows($pocZam);
echo 'pro jistotu vypis poctu: '.$pocZam.' zamestnancu...'; //pocet lidi 

echo '<table border="1" rule="1"><tr>';
$vycuc= mySql_Query("SELECT * FROM smeny WHERE date BETWEEN $zacatek_mesice AND $konec_mesice ORDER BY date ASC, pracovnik");
while($data = mySql_Fetch_Assoc($vycuc))
{
$date = $data ['date'];
$smena = $data ['smena'];
$poznamka = $data ['poznamka'];
$pracovnik = $data ['pracovnik'];
echo  '<td>'.$date[1].'</td><td>'.$smena.'</td><td>'.$poznamka.'</td><td>'.$pracovnik.'</td>';
}
echo '</tr></table>';
což mi vše omezí na jeden řádek. A já se tam snažím nacpat, aby to provedl na řádek jen tolikrát, kolik je zaměstnanců. tedy
for ($zam=1; $zam<=$pocZam; $zam++)
Jenže to podle mě nemůžu dát dovnitř while, protože by se to opakovalo s každým přidáním dalšího ++ ne? No a zase z venku mi to bude milionkrát dotazovat do DB, takže se z toho na 100% musí zase složit šílená slátanina, ze který mi praskne hlava :) Ale tedy po celém dni prosím o pomoc :-D řeším to od rána od 8mi, tak jen do mě :)


ještě mám nápad..
hondziiikh
Profil
a MÁM TO :)
$pocZam= mySql_Query("SELECT DISTINCT pracovnik FROM smeny"); //sem ještě budu omezovat měsícem, kdyby někoho vyhodili nebo nabrali
$pocZam=mySql_Num_Rows($pocZam);
echo 'pro jistotu vypis poctu: '.$pocZam.' zamestnancu...'; //pocet lidi   
echo '<table border="1" rule="1"><tr>';
$vyber = MySQL_Query("SELECT * FROM smeny WHERE date BETWEEN $zacatek_mesice AND $konec_mesice ORDER BY date ASC, pracovnik");
while($row = mysql_fetch_assoc($vyber))
{
$date = $row['date'];
$smena = $row['smena'];
$poznamka = $row['poznamka'];
$pracovnik = $row['pracovnik'];
echo  '<td>'.$date.'</td><td>'.$smena.'</td><td>'.$poznamka.'</td><td>'.$pracovnik.'</td>';

if ($pracovnik == $pocZam) echo '</td></tr><tr>';

}
echo '</tr></table>';
Teď ještě jestli to nejde nějak zjednodušit :)
candiess
Profil
hondziiikh:
kolik tam máš těch zaměstnanců?

zápis jako
if ($pracovnik == $pocZam) echo '</td></tr><tr>';
>
}
se mi vubec nelíbí...
hondziiikh
Profil
Zamestnancu je kazdou chvili jinak prave proto resim takhle :) vzdyt je to jednoduchy, kdyz jich bude 10 a vypis dojde k 10temu, tak zalomi a jede zase od nuly.. (psano z mob)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0