v5.dk logo
Kom ind og besøg vores Discord Chat-community
Bliv medlem her eller læs mere om Discord her
Få adgang til alt på hele v5.dk
- bliv Premium-medlem for kun 39,95 kr.

Mere info Køb nu

Premium på v5.dk
v5.dk logo  v5.dk e-learning
Log på med Facebook
  • Log ind på v5.dk
  • Opret bruger
  • Log ind
  • v5.dk Premium
  • v5.dk Premium
  • Hvad siger vores kunder?
  • E-læring for begyndere
  • icon for WordPress 4 e-learning WordPress 4
  • icon for Office 365 e-learning Office 365
  • icon for Microsoft Word e-learning Microsoft Word
  • Bloggen for alle
  • E-læring for nørder
  • icon for PHP-programmering e-learning PHP-programmering
  • icon for iOS Programmering e-learning iOS Programmering
  • icon for Linux Server e-learning Linux Server
  • Bloggen for nørder
  • Arkiverede videoer
  • Fællesskab
  • Forum
  • Idéer og ønsker
  • Markedspladsen
  • v5.dk Premium
  • Gratis webhotel
  • Cloud-servere
  • Om v5.dk
  • Søg på v5.dk
  • Om v5.dk ApS
    • Om virksomheden
    • RSS-feeds og tjenester
    • Driftsmeddelelser
    • Presse-kit
    • Ledige jobs
    • Social Netværk
      • Facebook
      • Twitter
      • Instagram
    • Alt det andet
      • Forretningsbetingelser
      • Ophavsret og Copyright
  • Kontakt kundeservice
  • FAQ og Hjælp
    • Premium og abb.
    • Videoer og Afspiller
    • Forum og Points
    • Cloud-servers
  • Partner/Virksomhed
  • Partner-kanal
v5.dk logo mobile
  • Menu
  • Opret bruger

Sum på DISTINCT'e værdier

  • v5.dk
  • Forum
  • PHP-programmering
  • Sum på DISTINCT'e værdier
  • Sidevisninger: 3020 har set dette indlæg
Besvar #0Spørgsmål oprettet af @Gadedrengen| Premium Premium | 11378 points
60 points ude 10 indlæg 6 år siden Spørgsmål besvaret
avatar
 

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">&nbsp; Varetyper </strong></td>
<th width="150">&nbsp; 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"> &nbsp; <?php echo $VarTyp['Varetekst']; ?> </td>
<td align="right"> <?php echo $VarTyp['Antal']; ?> &nbsp; </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

 

 

 

avatar
 
Besvar#1 @dhh Admin kommenterede for 6 år siden

Hej  Gadedrengen @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.) 

Redigeret af dhh @dhh  d. 07.11.2016 kl. 14:48

Med venlige hilsner

Daniel H. Hemmingsen (@dhh)

avatar
 
Besvar#2 @Gadedrengen Premium kommenterede for 6 år siden

I kigger bare -

med venlig hilsen

Carsten

 

avatar
 
Besvar#3 @Gadedrengen Premium kommenterede for 6 år siden

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 ???)

avatar
 
Besvar#4 @dhh Admin kommenterede for 6 år siden

#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)

avatar
 
Besvar#5 @Gadedrengen Premium kommenterede for 6 år siden

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

 

 

avatar
 
Besvar#6 @dhh Admin kommenterede for 6 år siden

#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. 

Redigeret af dhh @dhh  d. 08.11.2016 kl. 09:41

Med venlige hilsner

Daniel H. Hemmingsen (@dhh)

avatar
 
Besvar#7 @Gadedrengen Premium kommenterede for 6 år siden

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

Billede uploadet af Gadedrengen

med venlig hilsen

Carsten

p.s.

Måske jeg skal forsøge med en anden metode - går i tænkeboks

 

Dette svar er accepteret af OP og tildelt 60 points
avatar
 
Besvar#8 @dhh Admin svarede for 6 år siden

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)

avatar
 
Besvar#9 @Gadedrengen Premium kommenterede for 6 år siden

Hej Daniel.

Opgaven var mindre kompliceret end jeg egentligt troede, og du fik hjulpet mig på vej med en løsning som faktisk ikke indeholder DISTINCT, men GROUP BY og SUM

Tak for hjælpen 

Gadedrengen

avatar
 
Besvar#10 @dhh Admin kommenterede for 6 år siden

Hej  Gadedrengen @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)

Spørgsmålet er besvaret, men du er altid mere end velkommen til at skrive en kommentar!
avatar
 

Du er ikke logget ind

Du skal være logget ind på v5.dk før du kan benytte vores forum. Det er ganske gratis at oprette en bruger.

Opret en ny gratis bruger Log ind

Følger med i denne tråd

Gadedrengen

Forum kategorier

  • Generelt
  • Guides & Howto84
  • Offtopic / Andet158
  • Microsoft Office
  • Microsoft Word11
  • Microsoft Excel4
  • Microsoft PowerPoint0
  • Web og hjemmesider
  • Wordpress17
  • Operativsystemer
  • Apple Mac OS X14
  • Apple iOS28
  • Microsoft Windows4
  • Linux16
  • Teknologier
  • Netværk og WiFi3
  • Internet-tjenester9
  • Programmering
  • PHP-programmering124
  • iPhone-/Xcode-programmering9

Aktive forum-tråde lige nu

Er det værd at have en "portfolio"-hjemmeside!?
Fejlkode i form af bip-lyde ved opstart af gammel stationær PC
MacBook gået ud ved indsættelse at IPhone SE…
Is Weed Legal in Europe
Buy real passport online|Buy counterfeit money
Chrome Auto Fyld holdt op med at virke
ÆØÅ
Tegne Program
Bygget med af v5.dk
© Copyright 2006-2023 • Forretningsbetingelser • Copyright • Persondata- og Cookiepolitik
v5.dk ApS - Åbogade 15 - 8200 Aarhus N - CVR: 36902833
v5.dk logo
Hej, vi hedder v5.dk og vi laver e-learning på dansk

v5.dk er sat i verden for at gøre teknologi tilgængeligt og anvendeligt for både professionelle og almindelige brugere på alle niveauer.

93 200 555
  Skriv til os
v5.dk bruger cookies til at huske dine indstillinger, livechat samt til statistik
 

Alle vores priser er inkl. moms Sikker SSL-beskyttet forbindelse

Dankort og Visa-Dankort  Visa  Mastercard og Mastercard Junior  Maestro

  • Produkter
  • v5.dk Premium
  • Cloud-servers
  • v5.dk
  • Om v5.dk
  • Kunderne siger
  • Kontakt os
  • Presse
  • Stay updated
  • RSS & tjenester
  • Søg på v5.dk
  • Sitemap