"Ryan Kristensen" <usenet@ryankristensen.invalid> skrev i en meddelelse
news
.ug0fsthyzr1c02@ryan-ts6hqrwscb...
> Hej.
>
> Jeg har et problem med en sql-forespørgsel i en mysql-database.
> Jeg har tre databaser: en med produkter, en med tilbehør til produkterne,
> og en database jeg bruger til at tilknytte tilbehøret til produkterne.
> PRODUKTER
> produkter_id PK
> navn
> tillæg
>
> TILBEHØR
> tilbehør_id PK
> navn
> pris
>
> TILBEHØR_I_PRODUKTER
> produkter_id
> tilbehør_id
>
> Jeg vil gerne sortere efter den samlede pris, som skal være summen af
> prisen på alt tilknyttet tilbehør, og i nogle tilfælde skal et tillægsfelt
> i produkter tilføjes til summen. Problemet er, at når jeg bruger
> nedenstående sql-forespørgsel, så bliver tillægget tilføjet for hver
> enkelt tilbehør, og jeg ville gerne have, at det kun blev tilføjet én gang
> pr. produkt, uanset hvor meget tilbehør der måtte være. Der vil derudover
> også være nogle tilfælde, hvor et produkt ikke indeholder noget tilbehør,
> i det tilfælde skal den samlede pris selvfølgelig bare være indholdet af
> tillægs-feltet.
>
> Er det muligt?
>
> SELECT p.navn, p.tillæg, SUM(t.pris+p.tillæg), t.pris
> FROM produkter p
> LEFT JOIN tilbehør_i_produkter tp
> ON p.produkter_id=tp.produkter_id
> LEFT JOIN tilbehør t
> ON tp.tilbehør_id=t.tilbehør_id
> GROUP BY p.produkter_id
> ORDER BY SUM(t.pris+p.tillæg)
>
> --
> Mvh.
> Ryan Kristensen
Prøv med:
SELECT p.navn, p.tillæg, SUM(t.pris)+p.tillæg as slutpris
FROM produkter p
LEFT JOIN tilbehør_i_produkter tp
ON p.produkter_id=tp.produkter_id
LEFT JOIN tilbehør t
ON tp.tilbehør_id=t.tilbehør_id
GROUP BY p.produkter_id
ORDER BY slutpris
Alternativt, prøv med en inline forespørgsel:
SELECT navn, tillæg, totpris + tillæg as slutpris
FROM (
SELECT p.navn, p.tillæg, SUM(t.pris) as totpris
FROM produkter p
LEFT JOIN tilbehør t
ON tp.tilbehør_id=t.tilbehør_id
LEFT JOIN tilbehør_i_produkter tp
ON p.produkter_id=tp.produkter_id
GROUP BY p.produkter_id
) AS x
ORDER BY totpris + tillæg