Jeg vil gerne tælle unique poster i en tabel med mange kolonner og rækker

Jeg har oprettet et RMS-system og forsøger nu at lave nogle simple statistiske opslag på hvor meget et område har fået af ordrer, hvor mange varegrupper de har fået fra og hvor mange varetyper de har fået.
Det er lykkedes mig at lave en optælling på antallet af ordrer pr. område, men kæmper med at få varegrupper og varetyper til at give det unikke antal.
<!-- Her starter selve tabellens indhold -->
<?php foreach ( $app->DatabasePrepareQuery(
"SELECT DISTINCT Omraade FROM Udleveret
ORDER BY Omraade ASC",
array($_GET['Omraade'])) as $Omraade) { ?>
<tr>
<td> <?php echo $Omraade['Omraade']; ?> </td>
<td align="right"> <?php
$Antal = $app->DatabasePrepareQueryReturnFirstField("SELECT count(OrdreID) FROM Ordrer WHERE Omraade=?", array($Omraade['Omraade']));
echo $Antal['count(OrdreID)'] . " ordrer " ;
?> </td>
<td align="right"> <?php
$Typer = $app->DatabasePrepareQueryReturnFirstField("SELECT count(Varegruppe) FROM Udleveret WHERE Omraade=?", array($Omraade['Omraade']));
echo $Typer['count(Varegruppe)'] . " varegrupper " ;
?> </td>
</td>
<td align="right"> <?php
$Slags = $app->DatabasePrepareQueryReturnFirstField("SELECT count(Varetekst) FROM Udleveret WHERE Omraade=?", array($Omraade['Omraade']));
echo $Slags['count(Varetekst)'] . " varetyper " ;
?> </td>
</tr>
<?php } ?>
</table>
Jeg har måske taget den forkerte tilgang fra starten og det er måske forkert at starte med select distinct?
I altfald får jeg ikke de nødvendige resultater :-)

Hej @Gadedrengen
Efter hvad jeg kan se, så er det fordi at du mangler at bruge DISTINCT inde i din count(Varegruppe) osv. Du laver jo en ny forbindelse til serveren og trækker dataen ud fra databasen, ved hvert DatabaseQuery() kald. (Den husker ikke at du brugte DISTINCT før.)
Så eksempelvis med Varegrupper, kan du gøre følgende i stedet for:
// Lig mærke til at jeg smider DISTINCT ind i count(Varegruppe)
$Typer = $app->DatabasePrepareQueryReturnFirstField("SELECT count(DISTINCT Varegruppe) FROM Udleveret WHERE Omraade=?", array($Omraade['Omraade']));
Med venlige hilsner
Daniel H. Hemmingsen (@dhh)

#2
Man lære hele livet, som man siger. Og er kun glad for at kunne hjælpe.
En måde jeg gør mine SQL linjer lidt mere læsbar, er at når jeg bruger attributter som SELECT, COUNT, WHERE, LIMIT osv. Så holder jeg dem altid med store bogstaver, det gør det lidt nemmere at gennemskue hvis et SQL kald skulle lave vrøvl. Et lille tip fra mig til dig. :-) (Et jeg selv brugte for mange år siden, da jeg først lærte PHP.)
Redigeret af
@dhh
d. 03.11.2016 kl. 15:53 Med venlige hilsner
Daniel H. Hemmingsen (@dhh)