---
title: "Hjälp med sortering av trådar i forum - En gång till!"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/131412-hjälp-med-sortering-av-trådar-i-forum-en-gång-till"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "lillebror"
published: "2005-07-14T13:39:05.000Z"
updated: "2005-07-16T11:40:54.000Z"
replies: 6
views: 345
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/131412-hjälp-med-sortering-av-trådar-i-forum-en-gång-till"
---

# Hjälp med sortering av trådar i forum - En gång till!

## #1 — lillebror, 2005-07-14T13:39Z

Har ett snarliktproblem som jag hade i <http://www.webforum.nu/showthread.php?s=&threadid=128482&forumid=53> 

Denna gång gäller det hur saker och ting visas i själva forumlistan. I denna lista har jag ett fält med senaste inlägg (se bifogad bild). Det SQL-frågan ska få fram är när senaste inlägget/tråden postades. Normalt sätt är detta inte något problem så länge en tråd inte är obesvarad. Det är då problemet dyker upp. Finns det en obesvarad tråd skapad senare än det sista svarsinlägget som skapades så skall trådens postdatum visas i senaste inlägget istället för svarsinlägget. Har försökt med funktionen coalesce() som fungerade alldeles ypperligt tidigare. Nu har jag gått bet på vad som är fel.

Här i SQL-koden som tar ut informationen för respektive forum:

```
$sqlSelect = "SELECT t2.forumID, t2.title, t2.description, 
(SELECT COUNT(t1.threadID) FROM tblForumThread AS t1 WHERE t1.forumID = t2.forumID) AS threadnumber, 

[B]coalesce((SELECT DATE_FORMAT(t3.posted, '%Y-%m-%d %H:%i') FROM tblForumThreadReply AS t3, tblForumThread AS t7 
WHERE t3.threadID = t7.threadID AND t7.forumID = t2.forumID ORDER BY t3.posted DESC LIMIT 1), 
(SELECT DATE_FORMAT(t7.posted, '%Y-%m-%d %H:%i') FROM tblForumThread AS t7 WHERE t7.forumID = t2.forumID ORDER BY t7.posted DESC LIMIT 1)) AS lastpost[/B],

[B]coalesce((SELECT t3.posterID FROM tblForumThreadReply AS t3, tblForumThread AS t7 WHERE t3.threadID = t7.threadID AND t7.forumID = t2.forumID ORDER BY t3.posted DESC LIMIT 1), 
(SELECT t7.posterID FROM tblForumThread AS t7 WHERE t7.forumID = t2.forumID ORDER BY t7.posted DESC LIMIT 1)) AS posterID[/B],
	(SELECT COUNT(threadreplyID) FROM tblForumThreadReply AS t3, tblForumThread AS t7 WHERE t3.threadID = t7.threadID AND t7.forumID = t2.forumID ORDER BY t3.posted DESC LIMIT 1) AS replynumber,

[B]coalesce((SELECT (SELECT t8.username FROM tblMember AS t8 WHERE t8.memberID = t3.posterID) FROM tblForumThreadReply AS t3, tblForumThread AS t7 
WHERE t3.threadID = t7.threadID AND t7.forumID = t2.forumID ORDER BY t3.posted DESC LIMIT 1), 
(SELECT (SELECT t8.username FROM tblMember AS t8 WHERE t8.memberID = t7.posterID) FROM tblForumThread AS t7 WHERE t7.forumID = t2.forumID ORDER BY t7.posted DESC LIMIT 1)) AS username[/B]
	FROM tblForum AS t2 
	WHERE t2.categoryID = $ID AND t2.visible = 1 ORDER BY t2.displayorder ASC";
```

Jag blir snurrig bara jag tittar på koden!  :)

Bilagor:

- [mainforum.jpg](https://www.webforum.nu/a/6995.jpg)

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

## #2 — LarsG, 2005-07-14T13:59Z

För att få fram tidpunkt för sista postningen

```
select
 date_format((select max(posted)
    from (
      select t3.posted 
        from tblForumThreadReply AS t3, 
             tblForumThread AS t7 
      where t3.threadID = t7.threadID 
      and t7.forumID = t2.forumID
      union 
      select posted
      from tblForumThread AS t7 
      where t7.forumID = t2.forumID) dt),'%Y-%m-%d %H:%i') AS lastpost
  from tblForum AS t2 
 where t2.categoryID = $ID 
  and  t2.visible = 1 
 order by t2.displayorder asc
```

När det går lika bra med max så bör du låta bli att använda order by och limit i subfrågor eftersom det enbart fungerar i Mysql. Personligen skulle jag också låta bli date_format eftersom det är en presentationssak och hör mer hemma i presentationslagret.

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

## #3 — LarsG, 2005-07-14T14:03Z

Det går lika bra med coalesce

```
select
 coalesce(
     (select max(t3.posted)
        from tblForumThreadReply AS t3, 
             tblForumThread AS t7 
      where t3.threadID = t7.threadID 
      and t7.forumID = t2.forumID),
     (select posted
      from tblForumThread AS t7 
      where t7.forumID = t2.forumID)) AS lastpost
  from tblForum AS t2 
 where t2.categoryID = $ID 
  and  t2.visible = 1 
 order by t2.displayorder asc
```

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

## #4 — lillebror, 2005-07-14T20:06Z

Det första exemplet fick jag inte att fungera överhuvudtaget. I det andra exemplet är den enda synliga skillnaden att sekundrarna nu finns med i svaret eftersom inte DATE_FORMAT applicerats.

Som det är nu hämtar SQL-satsen ut det senaste svaret i ett av forumen. Om det finns en tråd utan svar som är nyare så vill jag att den ska skrivas ut.

Nu känns det som att det saknas ett vilkor i den fetmarkerade delen av den SQL-sats du skrev:

```
select
 coalesce(
     (select max(t3.posted)
        from tblForumThreadReply AS t3, 
             tblForumThread AS t7 
      where t3.threadID = t7.threadID 
      and t7.forumID = t2.forumID),
     [B](select posted
      from tblForumThread AS t7 
      where t7.forumID = t2.forumID)[/B]) AS lastpost
  from tblForum AS t2 
 where t2.categoryID = $ID 
  and  t2.visible = 1 
 order by t2.displayorder asc
```

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

## #5 — lillebror, 2005-07-14T21:37Z

Gick från ditt andra exempel till ditt första med union. Verkar smart att "smälta" ihop dessa tabeller. Som sagt, det kan ju då bara finnas en "sista" post.

Nu har jag problem. Får felmeddelandet **Unknown table 't2' in where clause**. Jag tolkar det som att den nästlande from-satsen inte känner igen t2.forumID från huvudsatsen? Am I right? :OO Jag har fetmarkerat dessa ställen nedan.

```
select
 date_format((select max(posted)
    from (
      select t3.posted 
        from tblForumThreadReply AS t3, 
             tblForumThread AS t7 
      where t3.threadID = t7.threadID 
      and t7.forumID = [B]t2.forumID[/B]
      union 
      select posted
      from tblForumThread AS t7 
      where t7.forumID = [B]t2.forumID[/B]) dt),'%Y-%m-%d %H:%i') AS lastpost
  from tblForum AS t2 
 where t2.categoryID = $ID 
  and  t2.visible = 1 
 order by t2.displayorder asc
```

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

## #6 — lillebror, 2005-07-15T09:51Z

Hur får man en tabell med ett alias i huvudsatsen att bli global i nästlande satser som behöver ett värde från frågan innan?

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

## #7 — lillebror, 2005-07-16T11:40Z

Någon idé?! :OO

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/131412-hjälp-med-sortering-av-trådar-i-forum-en-gång-till
