---
title: "Hämta ämnen och antal svar från samma tabell"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/73836-hämta-ämnen-och-antal-svar-från-samma-tabell"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "m_soderlund"
published: "2003-04-12T08:18:10.000Z"
updated: "2003-04-14T06:35:19.000Z"
replies: 11
views: 430
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/databaser-sql/73836-hämta-ämnen-och-antal-svar-från-samma-tabell"
---

# Hämta ämnen och antal svar från samma tabell

## #1 — m_soderlund, 2003-04-12T08:18Z

Jag har sökt här i forumet, men hittar bara folk som haft problem med sitt forum i att räkna ihop antalet svar till ett ämne, från en annan tabell.
Jag kör med **en tabell**, och vill räkna ihop alla svar till ett ämne när jag presenterar alla ämnen på förstasidan i forumet. Min kod som inte fungerar ser ungefär ut så här:

```
SELECT Id,Head,Topic,Name,Dt,(Count(Id) FROM tbl_forum WHERE Pid=Id) FROM tbl_forum WHERE Status='Topic' ORDER BY Id DESC
```

Jag är nog totalt fel ute, kan ingen hjälpa mig?

**/r** Jag använder en **Access-databas**.

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

## #2 — m_soderlund, 2003-04-12T09:43Z

Nu ser min SQL-kod ut så här:

```
Set Rs = Cn.Execute("SELECT Id,Head,Name,Dt,(SELECT Count(Pid) FROM tbl_forum WHERE Status='Answer' And Pid=Id) AS answ FROM tbl_forum WHERE Status='Topic' ORDER BY Id DESC")
```

Det är bara det att *WHERE Status='Answer'* måste vara *WHERE Status='Topic'* för att gå ihop med sista WHERE-instruktionen, och då fungerar det inte. :(

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

## #3 — @nders, 2003-04-12T09:45Z

Efter att ha mottagit Accessdatabas per e-post är det dags att såga lite här i tråden. :D

För det första gör din design av tabellen att frågan inte går att få ihop, eftersom du av någon anledning har satt Pid-fältet att vara av datatypen text. Varför då? Du kan inte joina eller jämföra ett talfält med ett textfält. Byt datatyp.

Du har också ett datumfält, Dt. Varför är det av typen text? Byt datatyp.

Ditt statusfält är av typen text och innehåller "Topic" eller "Answer". Mycket onödigt. Byt datatyp till tal, och lagra 0 eller 1 istället.

Dessutom lagrar du lösenord i tabellen. Vad har det i den här tabellen att göra? Det borde du ju endast lagra i användartabellen. 

Om du byter datatyp på fältet Pid, så verkar följande fråga göra det du vill:

```
SELECT a.Id, a.Head, a.Topic, a.Name,a.Dt, (select count (*) from tbl_forum b where  b.Pid=a.Id ) as replies
FROM tbl_forum a WHERE a.Status='Topic' ORDER BY a.Id DESC
```

Mvh

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

## #4 — m_soderlund, 2003-04-12T10:37Z

Hm.. Det där med fel datatyp var ett slarvfel, men det mesta annat är avsiktligt.

\- Jag använder text som datatyp för datum, för i Access kan man ex. inte välja att datumformatet ska se ut som *2003-04-13 12:31*, i alla fall lyckas inte jag med det.

\- Det där med Status-kolumnen: Jag tänkte testa med Topic/Answer och 0/1 för att se vilket som verkar effektivast, och har bara hunnit med Topic/Answer. Nu slapp jag testa med 0/1 (det är inte tidskrävande, men ändå..) - tack @nders!

\- Jag lagrar ett lösenord för varje nytt ämne eller svar, forumet är inte ett medlemsforum utan ett där användarna skriver in sitt namn, e-post (sen lagras det i en cookie så att forumet kommer ihåg det) och lösenord för varje enskild post, så att man sedan kan redigera posten.

Jag skulle inte vilja använda två tabeller, det brukar oftast bli krångligast då. Om jag använder två tabeller för ämnen och svar så skulle SQL-koden inte vara något problem, men nu är det så att koden fortfarande inte fungerar, trots att jag modifierat din kod, @nders. Min kod ser för närvarande ut så här och genererar inga felmeddelanden, men räknar fel antal svar per ämne:

```
SELECT Id,Head,Topic,Name,Dt, (SELECT Count(Id) FROM tbl_forum WHERE Pid=Id AND Status=1) AS replies FROM tbl_forum WHERE Status=0 ORDER BY Id DESC
```

Koden fungerar fortfarande inte - jag har ett svar bundet till ett ämne, men *replies* får värdet 0.

Mycket tacksam för mer hjälp, och tacksam för hjälpen hittils. :)

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

## #5 — @nders, 2003-04-12T10:43Z

Jag har inte tid att tänka så mycket på detta just nu, men:

\* Datumformat: Du ska ge fullständigt fan i hur Access lagrar datum. ;) Det är sånt du får formatera när du skriver ut värdena.

Jag återkommer senare.

mvh

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

## #6 — m_soderlund, 2003-04-12T10:48Z

> **@nders skrev:**
>
> Datumformat: Du ska ge fullständigt fan i hur Access lagrar datum. ;) Det är sånt du får formatera när du skriver ut värdena.

Då vet jag det nu, \*designar om databasen\*. Tack.

Men å andra sidan är SQL-koden inte löst.. :l

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

## #7 — @nders, 2003-04-12T13:22Z

Vad har du ändrat? Den selectfråga du visar nu ser ju inte alls ut som den jag gav dig (som fungerade, i alla fall när jag testade).

```
SELECT a.Id, a.Head, a.Topic, a.Name,a.Dt, (select count (*) from tbl_forum b where  b.Pid=a.Id ) as replies
FROM tbl_forum a WHERE a.Status=0 ORDER BY a.Id DESC
```

(Ändrade status till noll bara, annars min ursprungliga fråga.)

Mvh

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

## #8 — aasah, 2003-04-12T16:07Z

> **m_soderlund skrev:**
>
> ...- Jag lagrar ett lösenord för varje nytt ämne eller svar, forumet är inte ett medlemsforum utan ett där användarna skriver in sitt namn, e-post (sen lagras det i en cookie så att forumet kommer ihåg det) och lösenord för varje enskild post, så att man sedan kan redigera posten.
> 
> Jag skulle inte vilja använda två tabeller, det brukar oftast bli krångligast då. Om jag använder två tabeller för ämnen och svar ...

Borde du inte få oerhört mycket dubbellagringar med din design? Om en person svarar på flera poster, är det inte troligt att han/hon använder samma användarnamn och lösenord hela tiden då? Då vore det väl i alla fall bättre att lagra den infon en gång och sedan ha en koppling mellan användarinfon och posterna. Annars måste en person som använder ditt forum och t.ex. vill byta lösenord därför att lillebror har fått tag i det, byta detta lösenord på alla poster som han/hon har skrivit! Inte särskilt praktiskt.

På samma sätt, om du har ämnen och poster i samma tabell och någon gång i framtiden vill byta namn på ett ämne, så måste du med nuvarande struktur gå igenom hela databasen och ändra, i stället för att ändra på ett ställe i ämnestabellen. Genvägar är sällan enklast i längden.

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

## #9 — m_soderlund, 2003-04-13T13:20Z

> **@nders skrev:**
>
> Vad har du ändrat? Den selectfråga du visar nu ser ju inte alls ut som den jag gav dig (som fungerade, i alla fall när jag testade).
>
> ```
> SELECT a.Id, a.Head, a.Topic, a.Name,a.Dt, (select count (*) from tbl_forum b where  b.Pid=a.Id ) as replies
> FROM tbl_forum a WHERE a.Status=0 ORDER BY a.Id DESC
> ```
>
> (Ändrade status till noll bara, annars min ursprungliga fråga.)
> 
> Mvh

Uhm, utgår du inte från att jag använder två tabeller, *a* och *b*?

aasah: du har en del poänger, men poängen med detta forum är att det inte ska vara ett medlemsforum, utan ett forum som exempelvis Palleman.nu's forum.

Och sen har jag kommit runt problemet genom att lägga till ett fält i databasen, men om @nders kod nu fungerar använder jag den i stället. Tack!

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

## #10 — @nders, 2003-04-13T15:32Z

Nej, jag utgår inte ifrån att du har två tabeller, utan en. Dock har jag använt samma tabell två gånger i frågan (a och b). Testa.

Jag har som sagt testat mot din tabell, så det vore konstigt om det inte fungerar. 

Mvh

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

## #11 — m_soderlund, 2003-04-14T06:30Z

WOW! Tack @nders, det fungerade perfekt! Nu vet jag att man kan använda sådana namn på tabeller som inte existerar, för att kunna skapa en Join i en tabell. Tack!

Status för forumutvecklandet:
Utvecklingen går framåt, lite småfunktioner börjar att ta form. Närmast ska Martin söka efter citering på wF, samt kolla om han hittar någon bra Regular Expressions-text--\>länk-konverterare. :)

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

## #12 — @nders, 2003-04-14T06:35Z

> **m_soderlund skrev:**
>
> WOW! Tack @nders, det fungerade perfekt! Nu vet jag att man kan använda sådana namn på tabeller som inte existerar, för att kunna skapa en Join i en tabell. Tack!

Varsågod. :)

Egentligen använder man nyckelordet **AS** för att tilldela alias för en tabell eller ett fält, men det kan man lika gärna utelämna. Men, för översiktilighetens skull borde frågan sett ut så här:

```
SELECT a.Id, a.Head, a.Topic, a.Name,a.Dt, (select count (*) from tbl_forum [b]as[/b] b where  b.Pid=a.Id ) as replies
FROM tbl_forum [b]as[/b] a WHERE a.Status=0 ORDER BY a.Id DESC
```

Fältnamnen kvalificeras sedan med det nya namnet för att bestämma vilken av de två tabellinstanserna du menar.

Det var säkerligen ingen nyhet för dig, men kanske hjälper det någon om inte dig? :)

Mvh,

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/73836-hämta-ämnen-och-antal-svar-från-samma-tabell
