---
title: "Klurigt problem!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/asp/12456-klurigt-problem"
topic: "ASP"
topic_url: "https://www.webforum.nu/amne/asp"
author: "M@rtin"
published: "2001-11-04T18:26:00.000Z"
updated: "2001-11-04T20:28:00.000Z"
replies: 8
views: 159
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/asp/12456-klurigt-problem"
---

# Klurigt problem!

## #1 — M@rtin, 2001-11-04T18:26Z

Jag har tre tabeller i en databas som vi kan säga ser ut så här:

Ämne
 \- id
 \- namn

Kategori
 \- id
 \- namn
 \- ämne_id

Produkt
 \- id
 \- namn
 \- kategori_id
 \- sålda

Sedan vill jag välja välja de 5 översta produkterna (sorterade efter "sålda") från varje Ämne. Problemet är alltså hur jag ska gå igenom mellansteget smidigast så jag slipper lagra även Ämne i Produkten.

Permalänk: https://www.webforum.nu/p/12456

## #2 — LarsG, 2001-11-04T19:05Z

Vad hjälper det om du lagrar ämne i produkttabellen?

Hur många ämnen har du?

Om det inte är alltför många så kan man göra en union.

Jag har sett några generella lösningar,som är ganska komplexa, på det här problemet (och dom fungerar inte i Access).

Permalänk: https://www.webforum.nu/p/293699

## #3 — M@rtin, 2001-11-04T19:08Z

Lagrar jag ID:t på Ämnet i Produkt tabellen så behöver jag ju inte ta fram det från Kategoritabellen.

Jag har bara runt tre ämnen men det ska ju kunna variera.

Hur gör man med UNION då?

Jag använder Access :l

Permalänk: https://www.webforum.nu/p/293700

## #4 — LarsG, 2001-11-04T19:31Z

```
select * from (
select top 5 produkt.namn as produktnamn,ämne.namn as ämnesnamn,sålda from (produkt
 inner join  kategori on 
produkt.kategori_id = kategori.id)
inner join Ämne on kategori.ämne_id = ämne.id where ämne.namn = 'IZI'
order by sålda 
union
select top 5 produkt.namn ,ämne.namn,sålda from (produkt
 inner join  kategori on 
produkt.kategori_id = kategori.id)
inner join Ämne on kategori.ämne_id = ämne.id where ämne.namn = 'AGRA'
order by sålda 
) as s order by s.ämnesnamn,s.sålda
```

Tveksam om access klarar av en sådan fråga. Det enda som förenklar om du har med ämnesid är att du slipper en join.

Permalänk: https://www.webforum.nu/p/293701

## #5 — LarsG, 2001-11-04T19:36Z

Jag funderar lite så får vi se.

Permalänk: https://www.webforum.nu/p/293702

## #6 — LarsG, 2001-11-04T19:53Z

Nu har jag funderat 

```
select * from 
(select (select count(*) + 1 from produkt,kategori,ämne 
         where kategori_id = kategori.kategori_id
           and kategori.ämne_id = ämne.id
           and ämne.id = s.id
           and sålda > p.sålda) as rank, ämne.namn as ämne,
   produkt.namn as produkt,sålda 
  from produkt as p,kategori as k,ämne as s 
         where p.kategori_id = k.kategori_id
           and k.ämne_id = s.id
) as t
where t.rank <= 5
order by t.ämne, t.sålda desc
```

Helt otestat, då jag inte har någon Access.

Permalänk: https://www.webforum.nu/p/293703

## #7 — M@rtin, 2001-11-04T20:06Z

Hmm.. Jag får typblandningsfel men ajg vet inte om jag bytt ut helt rätt. Får nästan ta och skapa en databas som ser ut exakt så här och testa det.

De här k s och t är det något jag ska byta ut eller?

Permalänk: https://www.webforum.nu/p/293704

## #8 — LarsG, 2001-11-04T20:16Z

Nej, byt inte ut dom. 

Jag förutsätter att alla kolumner som heter något med id är av samma typ.

Permalänk: https://www.webforum.nu/p/293705

## #9 — LarsG, 2001-11-04T20:28Z

Annars så går det ju att skriva en sån här kycklingvariant:

```
sql = "select id,namn from ämne order by namn"
set rs = connect.execute(sql)
while not rs.eof
sql = "select top 5 * from produkt where kategori_id in (select id from kategori where ämne_id = " & rs("id") & ") order by sålda desc"
set prs = connect.execute(sql)
if not prs.eof then
   response.write rs("namn") & "<br>"
while not prs.eof
  'visa produkter
prs.movenext
wend
end if
prs.close
set prs = nothing
rs.movenext
wend
```

Permalänk: https://www.webforum.nu/p/293706

---

Tråden på webben: https://www.webforum.nu/amne/asp/12456-klurigt-problem
