Autor | Zpráva | ||
---|---|---|---|
andrstom Profil |
#1 · Zasláno: 3. 10. 2015, 20:21:32
Dobry den, ahoj
Jsem v pasti amatéra:-) - mám tabulku, ve které jsou uloženy data související s nakoupeným zbožím. Zkráceně - zboží je rozděleno do skupin (FaktSkup_II), dle data nakoupení (NakupDatum) a samozřejmě má nějakou cenu (CenaCelkova). Já bych potřeboval zobrazit a porovnat celkovou cenu nakoupeného zboží v jednotlivých skupinách v období1 a v období2. Nevím jak to nacpat do sql dotazu:-( Pro představu přikládám část kódu, který potřebuji upravit: <?php $DatumOd1 = mysql_real_escape_string($_GET['ObdobiOd1']); $DatumDo1 = mysql_real_escape_string($_GET['ObdobiDo1']); $DatumOd2 = mysql_real_escape_string($_GET['ObdobiOd2']); $DatumDo2 = mysql_real_escape_string($_GET['ObdobiDo2']); $sql1 = "SELECT FaktSkup_II,NakupDatum,SUM(CenaCelkova) AS Cena FROM szm_data WHERE (NakupDatum BETWEEN '$DatumOd1' AND '$DatumDo1') GROUP BY FaktSkup_II ORDER BY FaktSkup_II"; ?> <table> <tr><th>Fakturační skupina</th><th>Celková cena (Kč)</th><th>Celková cena 2 (Kč)</th></tr> <?php $q1 = mysql_query($sql1) or die("CHYBA SQL - ".mysql_error()); while ($r1 = mysql_fetch_array($q1)) { ?> <tr><td><?php echo $r1['FaktSkup_II']; ?></td><td><?php echo $r1['Cena']; ?></td><td><?php echo $r1['Cena2']; ?></td></tr> <?php } ?> </table> Děkuji za každý nápad,co mě posune zase o krok dál;-) |
||
Kajman Profil |
#2 · Zasláno: 3. 10. 2015, 21:03:27
Po dotazu na řádku 8 si můžete udělat while cyklus, kdy projdete všechny řádky a uložíte si součty do pole. Stejně uděláte další období (nejlépe v cyklu nebo ve funkci, ať kód máte jenom jednou). Výpis tabulky pak uděláte z toho pole, kam jste si náskládal údaje z více dotazů.
|
||
andrstom Profil |
#3 · Zasláno: 4. 10. 2015, 19:57:00
Kajman:
Dekuju za napovedu, avsak si nejsem uplne jisty jak to myslite...s while jem si uz pohraval, asi chybne - muzete mi to nastinit v mem prikladu? Nevim jestli jsem dobre vyjadril muj zamer...mel bych rad jeden sql dotaz (pokud to lze) do databaze, tak aby mi bylo vraceno: nazev skupiny,celkova cena nakoupeneho zbozi v obdobi1 a celkova cena nakoupeneho zbozi v obdobi 2. _______________________________________________________________ | FaktSkup | CenaCelkova v obdobi 1 | CenaCelkova v obdobi 2 | _______________________________________________________________ ... ... ... |
||
Kajman Profil |
#4 · Zasláno: 5. 10. 2015, 09:23:17
andrstom:
„mel bych rad jeden sql dotaz“ Ano jde to i jedním dotazem... něco jako SELECT FaktSkup_II, Coalesce(Sum(Cena1), 0) Cena1, Coalesce(Sum(Cena2), 0) Cena2 FROM ((SELECT FaktSkup_II, Sum(CenaCelkova) AS Cena1, 0 AS Cena2 FROM szm_data WHERE ( NakupDatum BETWEEN '$DatumOd1' AND '$DatumDo1' ) GROUP BY FaktSkup_II) UNION ALL (SELECT FaktSkup_II, 0 AS Cena1, Sum(CenaCelkova) AS Cena2 FROM szm_data WHERE ( NakupDatum BETWEEN '$DatumOd2' AND '$DatumDo2' ) GROUP BY FaktSkup_II)) t GROUP BY FaktSkup_II ORDER BY FaktSkup_II Ale myslím, že přehlednější a obdobně rychlé by byly dva dotazy rovnající výsledky do dvourozměrného pole. |
||
andrstom Profil |
#5 · Zasláno: 5. 10. 2015, 20:07:26
Zkousim to zprovoznit, ale hazi mi to:
CHYBA SQL - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT FaktSkup_II, COALESCE(SUM(Cena1), 0) Cena1, COALESCE(SUM(Cena2), 0)' at line 1 Pokud bych se dal cestou dvou cyklu while, kterymi nanaplnim dvourozmerne pole - jak by to melo vypadat? Predstavuji si to tak ze budou sql dotazy na kazde obdobi, ale pak bych se placal v naplneni a vypsani toho pole:-( Prosim o radu |
||
Kajman Profil |
#6 · Zasláno: 6. 10. 2015, 09:23:02
andrstom:
„Pokud bych se dal cestou dvou cyklu while, kterymi nanaplnim dvourozmerne pole - jak by to melo vypadat?“ Něco jako <?php function szm_data_compare() { //definice obdobi $obdobi = array( array( 'napdis'=>'Celková cena (Kč)', 'od'=>$_GET['ObdobiOd1'], 'do'=>$_GET['ObdobiDo1'] ), array('napdis'=>'Celková cena 2 (Kč)', 'od'=>$_GET['ObdobiOd2'], 'do'=>$_GET['ObdobiDo2'] ) ); //misto pro docasne ukladani $soucty=array(); $nadpisy=''; //vysosani dat pro jednotlive obdobi foreach($obdobi as $idObodbi => $hodnoty ) { $od = mysql_real_escape_string($hodnoty['od']); $do = mysql_real_escape_string($hodnoty['do']); $sql = "SELECT FaktSkup_II, Sum(CenaCelkova) AS Cena FROM szm_data WHERE ( NakupDatum BETWEEN '$od' AND '$do' ) GROUP BY FaktSkup_II ORDER BY FaktSkup_II"; $q = mysql_query($sql) or die("CHYBA SQL - ".mysql_error()); while ($r = mysql_fetch_array($q)) { if(!isset($soucty[$r['FaktSkup_II']])) { $soucty[$r['FaktSkup_II']]=array(); } $soucty[$r['FaktSkup_II']][$idObodbi]=$r['Cena']; } $nadpisy.='<th>'.htmlspecialchars($hodnoty['nadpis']).'</th>'; mysql_free_result($q); } ksort($soucty); //vypsani do tabulky echo "<table><tr><th>Fakturační skupina</th>$nadpisy</tr>"; foreach($soucty as $FaktSkup_II => $sloupce) { echo "<tr><td>".htmlspecialchars($FaktSkup_II)."</td>"; foreach($obdobi as $idObodbi => $hodnoty ) { echo "<td>".(isset($sloupce[$idObodbi])?htmlspecialchars($sloupce[$idObodbi]):0)."</td>"; } echo "</tr>"; } echo "</table>"; } szm_data_compare(); ?> |
||
andrstom Profil |
waaauuu....tak tohle by mi dalo dost práce...díky moc. Jdu to zkusit zprovoznit;-)
Funguje přesně jak by mělo, jen se mi nezobrazovali nadpisy Celková cena (Kč) a Celková cena 2 (Kč) => v řádku 7 a 11 je překlep "napdis" místo "nadpis" (to jen kdyby to někdy někdo chtěl použít) Mnohokrát děkuju za Váš čas;-) |
||
Časová prodleva: 9 let
|
0