Sum på DISTINCT'e værdier

Hej v5.dk
I mit RMS-system, vil jeg gerne lave nogle lister som summer op på udleverede varer.
Disse er valgt ved hjælp af DISTINCT, men jeg har problemer med at få den til at give mig den samlede sum af de DISTINCT'e værdier.
<table border="2" cellspacing="1" align="center" width="750">
<tr bgcolor="#FF6A00">
<th width="600"> Varetyper </strong></td>
<th width="150"> Antal </strong></td>
</tr>
<?php
foreach ( $app->DatabasePrepareQuery(
"SELECT DISTINCT Varetekst FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC",
array($_SESSION['omraade'])) as $VarTyp)
{ ?>
<tr>
<td align="left"> <?php echo $VarTyp['Varetekst']; ?> </td>
<td align="right"> <?php echo $VarTyp['Antal']; ?> </td>
</tr>
<?php } ?>
</table>
Det virker ikke med SELECT DISTINCT som det kan ses af screendumpet, men jeg har prøvet med SELECT * og puttet DISTINCT ind forskellige steder - det giver bare forskellige fejl og ikke et resultat med tal i feltet antal

Hej @Gadedrengen
Om muligt, kunne vi få et lille kig på hvordan din database tabel er sat op. Det vil give os en lidt bedre idé om hvad vi evt. kan gøre. (Evt. en var_dump med SELECT * og LIMIT 0,1.)
@dhh
d. 07.11.2016 kl. 14:48 Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

Gud ja - jeg har problemer med at uploade mine ændringer på jeres webhotel, så lige nu leger jeg med produktions-websitet (www.udleveringen.dk) - havde lige glemt at jeg får fejl hver gang jeg prøver at uploade en rettelse til Gadedrengen.z5 (undtagen når jeg sender png og jpg-filer over ???)

#2 Jeg tænkte mere på om du ikke ville køre en:
$data = $app->DatabasePrepareQuery(
"SELECT * Varetekst FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC",
array($_SESSION['omraade'])
);
echo "<pre>";
var_dump($data);
echo "</pre>";
Resultatet kan du så smide ind her, så det giver lidt mere mening om hvad for nogle data den overhovedet sender tilbage. (Generelt er var_dump() din ven når man skal debugge SQL.)
#3 Vi har opgraderet vores gratis webhoteller fornyligt, bl.a. til PHP version 7 og meget andet. Du skulle meget gerne kunne uploade lige som før, via FTP. (Igennem Atom eller Filezilla, eller lige det program du benytter.)
Har du stadigvæk problemer, er du velkommen til at henvende dig i vores privat chat. (For lige at holde tråden her fokuseret på PHP.)
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

Hej Daniel.
Den giver mig følgende:
Der opstod en fejl - fejlbesked: SQLSTATE[42000]: Syntax error or access violation: 1064 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 'Varetekst FROM Udleveret WHERE Omraade='Udleveringen' ORDER BY Varetekst ASC' at line 1
Fjerner jeg Varetekst i SELECT * Varetekst, får jeg følgende:
object(PDOStatement)#4 (1) {
["queryString"]=>
string(66) "SELECT * FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC"
}
Fjerner jeg * i Select * Varetekst før jeg følgende:
object(PDOStatement)#4 (1) {
["queryString"]=>
string(74) "SELECT Varetekst FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC"
}
Benytter jeg SELECT DISTINCT Varetekst får jeg følgende:
object(PDOStatement)#4 (1) {
["queryString"]=>
string(83) "SELECT DISTINCT Varetekst FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC"
}
Jeg ved ikke om det giver nogen mening!
Jeg har fået FTP'en til at virke :-)
med venlig hilsen
Carsten

#5 Argh, det er mig der kun lige skimtede din kode. Jeg undskylder, prøv i stedet at gøre disse to ting i dit foreach:
<?php
// Vi bruger LIMIT 0,1 for kun at få en "row" ud af databasen,
// så det er nemmere at se hvad der sker.
foreach ( $app->DatabasePrepareQuery(
"SELECT DISTINCT Varetekst FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC LIMIT 0,1",
array($_SESSION['omraade'])) as $VarTyp)
{
// Så tester vi og ser hvad vi får tilbage med SQL kaldet.
echo "<pre>".var_dump($VarTyp)."</pre>";
}
?>
Med SELECT DISTINCT Varetekst, for du kun vartekst tilbage - så det er det eneste du kan "printe" ud. Som var_dump($VarTyp) også burde visse.
Hvis du vil være sikker på alt hvad du kan få ud af din tabel fra Udleveret, prøv i stedet følgende:
<?php
// Vi bruger LIMIT 0,1 for kun at få en "row" ud af databasen,
// så det er nemmere at se hvad der sker.
// Lig mærke til at jeg fjernede DISTINCT og Varetekst, så vi for
// all rækker tilbage fra "Udleveret". På den måde kan vi nemt gå ind
// bagefter og kun tage de rækker, såsom Varetekst ud.
foreach ( $app->DatabasePrepareQuery(
"SELECT * FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC LIMIT 0,1",
array($_SESSION['omraade'])) as $VarTyp)
{
// Så tester vi og ser hvad vi får tilbage med SQL kaldet.
echo "<pre>".var_dump($VarTyp)."</pre>";
}
?>
I din test kode, for du aldrig "Antal" trukket ud, da du jo kun tager "Varetekst" ud med din SQL kode. Så med andre ord: <?php echo $VarTyp['Antal']; ?> kommer aldrig ud. Da du ikke har sagt at du vil have den "række" ud af databasen. Hvad jeg tror måske vil virke, ville være:
<?php
// Vi bruger LIMIT 0,1 for kun at få en "row" ud af databasen,
// så det er nemmere at se hvad der sker.
// Vi vil gerne have Varetekst og Antal ud af databasen.
foreach ( $app->DatabasePrepareQuery(
"SELECT DISTINCT Varetekst, Antal FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC LIMIT 0,1",
array($_SESSION['omraade'])) as $VarTyp)
{
// Så prøver vi at printe arrayen ud vi får tilbage,
// for at få præcis de informationer vi gerne vil have.
echo "<pre>".var_dump($VarTyp)."</pre>";
}
?>
Jeg håber at det hele giver mening.
@dhh
d. 08.11.2016 kl. 09:41 Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

Hej Daniel.
Det giver en del mening, og jeg kan få både varetyper og antal, men kun for den første DISTINCT'e record. Jeg vil gerne have den samlede sum af den enkelte varetype i antal og det volder mig lidt problemer.
således ser resultatet ud ved limit0,10
med venlig hilsen
Carsten
p.s.
Måske jeg skal forsøge med en anden metode - går i tænkeboks

Jeg er ikke helt sikker på hvad du vil have samlede sum på, eller rettere hvordan. Hvis du mener at du bare vil addere "Antal" sammen, og så visse det til sidst i tabellen på hjemmesiden. Så kunne du gøre følgende:
<?php
// Vi sætter sum til 0;
$sum = 0;
// Vi vil gerne have Varetekst og Antal ud af databasen.
foreach ( $app->DatabasePrepareQuery(
"SELECT DISTINCT Varetekst, Antal FROM Udleveret WHERE Omraade=?
ORDER BY Varetekst ASC",
array($_SESSION['omraade'])) as $VarTyp)
{
// I vores foreach loop, tager vi $VarTyp['Antal'] og addere til vores $sum variabel.
$sum += $VarTyp['Antal'];
}
// Når vi er færdige med at loope over alle vores records, kan vi ganske simpelt echo
// hele summen ud.
echo "Total sum: ".$sum;
?>
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

Hej @Gadedrengen
Dejligt at høre at det hele virker nu, og jeg i det mindste fik dig på det rette spor. GROUP BY og SUM i SQL er meget geniale "værktøjer". (Da jeg ikke har bedre ord for det lige nu. Hehe.)
Oftest så er svaret (i især PHP) mindre kompliceret end man først tror. Men så er det jo godt at vi lære. Har du spørgsmål i fremtiden, så sider vi her på forummet en anden gang.
Fortsat god dag - og vigtigst af alt, fortsat gode kode-lyst.
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)