webForumDet fria alternativet

SQL-strul

3 svar · 195 visningar · startad av K@llen

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

Hej,

Jag donar med en paging men får inte mina sql-frågor rätt. Följande sql-fråga hämtar posterna:

    $strSQL = "SELECT ft.topicId, ft.topicSubject, ft.topicUid, 
ft.forumId, ft.topicImportant, ft.topicClosed, ft.topicLastActive, 
ft.movedToForumId, ft.topicLastActiveUid, ft.topicLastActiveUsername, 
p.req_Username, COUNT(fp.topicId) as noOfAnswer   
    FROM forum_topic ft
    INNER JOIN forum_post fp
    ON ft.topicId = fp.topicId
    INNER JOIN Profil p
    ON ft.topicUid = p.AnvId
    WHERE ft.forumId = " . $_GET['fId'] . " 
    GROUP BY ft.topicId, ft.topicSubject, ft.topicUid, ft.forumId, 
ft.topicImportant, ft.topicClosed, ft.topicLastActive, 
ft.movedToForumId, ft.topicLastActiveUid, 
ft.topicLastActiveUsername, p.req_Username 
    ORDER BY ft.topicImportant DESC, ft.topicLastActive DESC 
 LIMIT " . $pager -> fromRecords . ", " . $pager -> maxPerPage . " ";

Sedan en separat count() för att se hur många poster det finns totalt:

$strSQL = "SELECT count(*) AS rows  
    FROM forum_topic ft 
    INNER JOIN forum_post fp 
    ON ft.topicId = fp.topicId 
    INNER JOIN Profil p 
    ON ft.topicUid = p.AnvId 
    WHERE ft.forumId = " . $_GET['fId'] . "";

Hur jag än utformar min count() får jag inte ut samma antal poster som om jag tar bort limit i första frågan. Hur ska min andra fråga se ut för att överensstämma med den första?

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Lägg till den group by som finns i första frågan.

K@llenMedlem sedan mars 20032 667 inlägg
#3

LarsG skrev:

Lägg till den group by som finns i första frågan.

Det har jag provat men jag får inte rätt antal poster ändå. :(

Den första frågan returnerar 447 poster

Counten ovan ger 2772 poster som svar. Lägger jag till group by får jag ut 5 poster som svar.

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

Jag hittade detta på mysql.com
http://www.mysql.com/doc/en/GROUP-BY-hidden-fields.html

Blev aldrig klok på vad de menar. Så jag förenklade istället och lagrade antal svar i en egen kolumn istället för att räkna svaren i sql-frågan. Nu får jag samma resultat. Frågorna blev till slut:

SELECT ft.topicId, ft.topicSubject, ft.topicUid, ft.forumId, 
ft.topicImportant, ft.topicClosed, ft.topicLastActive, ft.movedToForumId, ft.topicLastActiveUid, 
ft.topicLastActiveUsername, ft.noOfAnswer, p.req_Username    
FROM forum_topic ft
INNER JOIN Profil p
ON ft.topicUid = p.AnvId
WHERE ft.forumId = " . $_GET['fId'] . " 
ORDER BY ft.topicImportant DESC, ft.topicLastActive DESC

SELECT COUNT(*)  
FROM forum_topic ft
INNER JOIN Profil p
ON ft.topicUid = p.AnvId
WHERE ft.forumId = " . $_GET['fId'] . "
135 ms totalt · 3 externa anrop · v20260731065814-full.30151723
132 ms — hämta forumlista (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)