webForumDet fria alternativet

COUNT

5 svar · 282 visningar · startad av K@llen

K@llenMedlem sedan mars 20032 654 inlägg
#1

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',
K@llenMedlem sedan mars 20032 654 inlägg
#2

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?

LarsGMedlem sedan dec. 200012 465 inlägg
#3

Gör flera frågor.

K@llenMedlem sedan mars 20032 654 inlägg
#4

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?

LarsGMedlem sedan dec. 200012 465 inlägg
#5

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.

K@llenMedlem sedan mars 20032 654 inlägg
#6

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?

Genererad på 380 ms · cache AV · v20260730165559-full.f96bc7eb