webForumDet fria alternativet

Problem med sotering

2 svar · 255 visningar · startad av greyhound

greyhoundMedlem sedan maj 20031 472 inlägg
#1

Jag har följade SQL:

SELECT F.F_Id AS T_Id, F.F_Topic AS T_Topic, F.F_Views AS T_Views,
F.F_Date AS T_Date, F.F_Hidden AS T_Hidden, Users.U_Nickname AS T_Nickname,
Users.U_Fornamn AS T_Fornamn, Users.U_Efternamn AS T_Efternamn, (
  SELECT count( * )
  FROM frmPosts
  WHERE F_Reply = F.F_Id
) AS T_Replies
FROM frmPosts AS F
LEFT JOIN Users ON F.F_Owner = Users.U_Id
WHERE F.F_Reply =0
ORDER BY (
  SELECT F_Date
  FROM frmPosts
  WHERE F_Reply = F.F_Id
  ORDER BY F_Date DESC
  LIMIT 1
) DESC

Den funkar ganska bra. Den räknar ut hur många svar varje tråd i ett forum har fått. Den soterar också trådarna efter nyast svar.

Mitt problem: Trådar utan svar kommer sist. Hur får man in så att dessa trådar sorteras in rätt också?

/Edit: mySQL är det som det handlar om :)

greyhoundMedlem sedan maj 20031 472 inlägg
#2

Håller på och testar med UNION.

Nya frågan ser ut såhär:

SELECT F.F_Id AS T_Id,
       F.F_Topic AS T_Topic,
       F.F_Views AS T_Views,
       F.F_Date AS T_Date,
       F.F_Hidden AS T_Hidden,
       Users.U_Nickname AS T_Nickname,
       Users.U_Fornamn AS T_Fornamn,
       Users.U_Efternamn AS T_Efternamn,
       (
         SELECT count( * )
         FROM frmPosts AS tmpTable3
         WHERE F_Reply = F.F_Id
       ) AS T_Replies
       FROM frmPosts AS F
       LEFT JOIN Users ON F.F_Owner = Users.U_Id
       WHERE F.F_Reply =0
       ORDER BY (
         (
           SELECT F_Date
           FROM frmPosts AS tmpTable1
           WHERE F_Reply = F.F_Id
         ) UNION (
           SELECT F_Date
           FROM frmPosts AS tmpTable2
           WHERE F_Id = F.F_Id
         ) ORDER BY F_Date DESC LIMIT 1
       ) DESC

Med får bara följande fel:

#1064 - You have an error in your SQL syntax; check the manual
that corresponds to your MySQL server version for the right syntax to use near
'UNION (SELECT F_Date FROM frmPosts AS tmpTable2' at line 22

Båda frågorna går bra om man kör dom var för sig.

greyhoundMedlem sedan maj 20031 472 inlägg
#3

Egentligen så var det grymt enkelt ;)

Skippade Union och körde med "OR" bara ;)

129 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)