Avatar billede Jakie Juniormester
14. august 2012 - 23:38 Der er 7 kommentarer og
1 løsning

Summen af flere felter

Hej :)

Jeg har en database, hvor jeg har logget en brugers fiktive køb og hvor mange stk.

Fx kunne brugeren have købt et sværd for 4000kr, hvor brugeren har købt 2.

Normalt kunne jeg bare bruge MySQL SUM, men hvordan gør jeg i denne sammenhæng, når stk. ligesom skal ganges med prisen og lægges sammen med alle de andre køb brugeren måske har lavet?

På forhånd tak for hjælpen:)
15. august 2012 - 05:17 #1
Lad os sige, at du har en tabel 'jakie' med blandt andet felterne stkpris og antal.  Så får du totalbeløbet for hver række ved stkpris * antal, og du får summen af alle totalbeløb ved SELECT SUM(stkprix * antal) FROM jakie

(Det er muligt at denne kommer to gange, men efter jeg sendte den første gang fandt jeg den ikke tilbage.)
Avatar billede The_Buzz Novice
15. august 2012 - 08:07 #2
SELECT SUM(stkprix * antal) FROM jakie
virker så vidt jeg kan regne ud ikke

SELECT (stkprix * antal) as totalsum FROM jakie where buyer=1234

Så kan du lave en while løkke med alle totalsum og lægge dem sammen

Desuden er SUM, AVG osv kald rimelig resourcekrævende - så sørg for der er index ihvertfald på buyer
Avatar billede Jakie Juniormester
15. august 2012 - 11:28 #3
Tak for jeres svar :)


if ($stmt = mysqli_prepare($mysqli, "SELECT (udbud * stk) as totalsum FROM xxx WHERE xxx = ? ")) {

    mysqli_stmt_bind_param($stmt, "i", $id);

    mysqli_stmt_execute($stmt);
   
    $stmt->bind_result($aktiver);
   
   
    while ($stmt->fetch()) {

   
   
echo 'Aktiver: ' . $aktiver;



}

}


Så hvordan får jeg plusset det sammen i løkken?
15. august 2012 - 13:06 #4
The_Buzz, forskellen på det du siger ikke virker og så det du foreslår synes udelukkende, at du indfører en begrænsning, søgning på en bestemt bruger, som spørgeren ikke selv havde indkluderet i sit oprindelige spørgsmål.  Spørgsmålet, som jeg læste det, var hvordan man i mysql kan søge på summen af størrelser der først skal ganges med hinanden.  Det mener jeg, at jeg gav en løsning på.

Jakie, så udvider du problemstillingen til at præsentere et resultat i php.  (Egenlig burde du havde afsluttet dit oprindelige spørgsmål og oprettet et nyt med den udvidede problemstilling, men lad gå for nu.)  Men det står mig ikke helt klart hvad du søger efter og hvordan du vil have det præsenteret.  Du siger 'FROM xxx WHERE xxx = ?.  Det første xxx må vel være navnet på den pågældende tabel, men hvad er det andet xxx?  Er det en bestemt bruger?  Det er således ikke nok at få den brugers totale indkøb (for det ville du som sagt få ved "SELECT SUM(udbud * stk) ...."  Vil du i php have skrevet ud hvert beløbet fra hvert indkøb en bestemt bruger gjorde og derefter summen af alle indkøb fra den bruger?  Kan du vise et eksempel på en opstilling af de informationer du vil have skrevet ud?
Avatar billede olebole Juniormester
15. august 2012 - 16:06 #5
<ole>

@Christian_Belgien: Det er tydeligt, du enten sidder på hovedet - eller bør gå til optikeren (alternativt til lidt dansk læseundervisning) - "men lad gå for nu"! *LoL*

@Jakie: Det kommer lidt an på, hvad du ønsker resultatet skal være. Hvis du ønsker en sammentælling af brugerens køb af ét enkelt varenummer, kan du skrive noget i stil med:

$mysqli = new mysqli('localhost', 'root', '', 'foobar');
if ($stmt = $mysqli->prepare('SELECT (udbud * stk) as totalsum FROM foo WHERE user = ? AND varenummer = ?')) {
    $stmt->bind_param('ii', $id, $varenummer);
   
    $id = 1;
    $varenummer = 33;
   
    $stmt->execute();
    $stmt->bind_result($aktiver);
   
    $stmt->fetch();
   
    $stmt->close();
    echo $aktiver;
}
$mysqli->close();

Ønsker du derimod det samlede beløb en bruger har købt for (alle varenumre), kan du skrive:

$mysqli = new mysqli('localhost', 'root', '', 'foobar');
if ($stmt = $mysqli->prepare('SELECT (udbud * stk) as totalsum FROM foo WHERE user = ?')) {
    $stmt->bind_param('i', $id);
   
    $id = 1;
   
    $stmt->execute();
    $stmt->bind_result($aktiver);
   
    $total = 0;
    while ($stmt->fetch()) {
        $total += $aktiver;
    }
   
    $stmt->close();
    echo $total;
}
$mysqli->close();

Hvis du ønsker en opgørelse over, hvad brugeren har brugt på alle varenumre, kan du skrive:

$mysqli = new mysqli('localhost', 'root', '', 'foobar');
if ($stmt = $mysqli->prepare('SELECT varenummer, (udbud * stk) as totalsum FROM foo WHERE user = ?')) {
    $stmt->bind_param('i', $id);
   
    $id = 1;
   
    $stmt->execute();
    $stmt->bind_result($vare, $aktiver);
   
    $varer = array();
    while ($stmt->fetch()) {
        $varer[$vare] = $aktiver;
    }
   
    $stmt->close();
    var_dump($varer);
}
$mysqli->close();
?>

/mvh
</bole>
Avatar billede Jakie Juniormester
15. august 2012 - 16:55 #6
Jeg ønskede det samlede beløb en bruger har købt for (alle varenumre), derfor var Oles svar fyldestgørende - TAK :)

Da jeg ved at Ole ikke tager point, så giver jeg dem til The Buzz-

Tak for hjælpen :)
Avatar billede olebole Juniormester
15. august 2012 - 17:04 #7
Selvtak - og husk, hvad The_buzz skrev om indeksering. Det er altid vigtigt at indeksere tabeller med de felter, som anvendes ved søgning - ikke mindst ved brug af MySQL's mere ressourcekrævende funktioner  *o)
Avatar billede Jakie Juniormester
15. august 2012 - 17:50 #8
Det vil jeg huske :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester