---
title: "COUNT"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/79284-count"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "K@llen"
published: "2003-06-09T20:24:14.000Z"
updated: "2003-06-09T23:01:59.000Z"
replies: 5
views: 282
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/79284-count"
---

# COUNT

## #1 — K@llen, 2003-06-09T20:24Z

Hej,

jag har en sql-fråga som ser ut som nedan. Frågan hämtar ut trådar i ett forum. Nu vill jag räkna hur många svar trådarna har.

Ett orginalinlägg har orginal = 1 och Thread_MessId blir det samma som sitt eget MessId. 

Alla svaren har orginal = 0 och Thread_MessId är orginalinläggets MessId.

Kan jag räkna hur många svar en tråd har utan att använda subselects, och isf hur?

```
$strSQL = "SELECT i.MessId, i.Subject, i.Locked, i.IntForumId, i.viktig, p.AnvId, p.req_Username
FROM Inlagg 
INNER JOIN Profil p
ON ( i.Inlagg_AnvId = p.AnvId )
WHERE i.Orginal = 1
AND i.IntForumId = " . $fId . "
ORDER BY i.viktig DESC, i.LastUpdate DESC ";
```

Tabellstruktur:

```
  `MessId` int(11) NOT NULL auto_increment,
  `Subject` varchar(100) NOT NULL default '',
  `Comment` text NOT NULL,
  `dteDate` varchar(20) NOT NULL default '',
  `Inlagg_AnvId` smallint(14) default NULL,
  `Locked` tinyint(1) default '0',
  `IntForumId` tinyint(2) default NULL,
  `Orginal` tinyint(1) NOT NULL default '0',
  `Thread_MessId` int(11) default NULL,
  `viktig` tinyint(1) NOT NULL default '0',
```

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

## #2 — K@llen, 2003-06-09T21:17Z

Jag testade denna. Fick ut rätt resultat men tog en evig tid att exekvera:

```
$strSQL = "SELECT i.MessId, i.Subject, i.Locked, i.IntForumId, i.viktig, 
p.AnvId, p.req_Username, count(t2.Thread_MessId) as answers 
FROM Inlagg as i
LEFT OUTER JOIN Inlagg as t2 
ON ( i.MessId = t2.Thread_MessId )
INNER JOIN Profil p
ON ( i.Inlagg_AnvId = p.AnvId )
WHERE i.Orginal = 1
AND i.IntForumId =" . $fId . "
GROUP BY i.MessId, i.Subject, i.Locked, i.IntForumId, i.viktig, p.AnvId, p.req_Username
ORDER BY i.viktig DESC, i.LastUpdate DESC ";
```

Den tog ju tom längre tid än en COUNT() inne i loopen. :(

Fler förslag?

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

## #3 — LarsG, 2003-06-09T21:31Z

Gör flera frågor.

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

## #4 — K@llen, 2003-06-09T22:16Z

> **LarsG skrev:**
>
> Gör flera frågor.

Så det effektivaste i detta fallet är en COUNT i loopen med andra ord, eller vad menar du med flera frågor?

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

## #5 — LarsG, 2003-06-09T22:57Z

Nja, jag vet nog inte vad jag menade nu när jag tänker efter. 

Varför behöver du en outer join? Borde du inte dela upp inläggstabellen i två tabeller istället? Då kan du lagra antal svar/senast inlägg etc direkt i tabellen. Eftersom det är mest läsning i forum så borde du tjäna på denna dubbellagring.

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

## #6 — K@llen, 2003-06-09T23:01Z

Tabellstrukturen är inte att göra mycket åt nu, då den är en tidigare använd struktur med mängder av data som ska återanvändas. Forumet ska enbart byggas om till annat språk.

Om jag inte ska använda en outer join, vad ska användas istället?
Kan jag få ut det med en fråga på ett hyffsat effektivt sätt?

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/79284-count
