| 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: 11 let
|
|||
0