---
title: "Hjälp med JOIN"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/152376-hjälp-med-join"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "lillebror"
published: "2006-10-11T12:37:21.000Z"
updated: "2006-10-13T06:19:10.000Z"
replies: 2
views: 325
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/152376-hjälp-med-join"
---

# Hjälp med JOIN

## #1 — lillebror, 2006-10-11T12:37Z

Hej,

Jag håller på och bygger om mitt forum. Samtidigt passar jag på att göra om SQL-koden då jag ändrat på den grundläggande designen i databasen.

För att förenkla SQL-koden har jag börjat använda mig av JOIN i mina uttryck. Jag tror att jag har förstått principen för hur de ska användas men jag får inte riktigt det resultat jag vill ha ändå.

Nuvarande SQL-sats:

```
SELECT t1.*, t2.threadID, t3.postID, t2.subject, t3.content, t3.posted, t3.postedbymemberID, t4.username, 
(SELECT COUNT(threadID) FROM xtblforumthread AS t5 WHERE t5.forumID = t1.forumID) AS numberofthreads,
(SELECT COUNT(postID) FROM xtblforumpost AS t7 WHERE t7.threadID IN (SELECT t6.threadID FROM xtblforumthread AS t6 WHERE t6.forumID = t1.forumID)) AS numberofposts 
FROM xtblforum AS t1
INNER JOIN xtblforumthread AS t2 ON t1.forumID=t2.forumID
INNER JOIN xtblforumpost AS t3 ON t3.threadID=t2.threadID
INNER JOIN tblmember AS t4 ON t4.memberID=t3.postedbymemberID
WHERE t1.forumcategoryID = $categoryID AND t2.forumID = t1.forumID AND t3.threadID = t2.threadID AND t1.visible = 1 AND t1.forumgroupID = ".$inline."
ORDER BY t1.displayorder, t3.posted DESC LIMIT 0,3";
```

SQL-koden anropas från en funktion som heter **getForum($categoryID)**  som matas med den **kategori** som forumet tillhör. Funktionen skall då hämta ut samtliga forum som tillhör en viss kategori med de fält som finns först i SQL-frågan.

I xtblForum hämtar jag ut den information som hör direkt till ett visst forum. I samma fråga vill jag även ha ut information om vilket inlägg som är det senaste postade inlägget i forum samt **användarID** och **användarnamn** för den personen som skapat inlägget. Inläggen lagras i tabellen **xtblforumpost**. 

Så här ser det ut i phpMyAdmin när jag kört ovanstående kod:

Se bild i slutet av dokumentet.

Jag vill ha ut samtliga forum under exempelvis kategori 1 med hjälp av JOIN-kommandot. I mitt fall borde det bli runt 8 forum. För varje forum vill jag få ut följande fält:

t1.\*, 
t2.threadID 
t3.postID 
t2.subject 
t3.content 
t3.posted 
t3.postedbymemberID 
t4.username

Hur ska jag förändra SQL-koden? :)

Bilagor:

- [sql-screen.jpg](https://www.webforum.nu/a/12499.jpg)

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

## #2 — LarsG, 2006-10-11T15:21Z

```
SELECT t1.*, 
       t2.threadID, 
       t3.postID, 
       t2.subject, 
       t3.content, 
       t3.posted, 
       t3.postedbymemberID, 
       t4.username, 
 (SELECT COUNT(threadID) 
    FROM xtblforumthread AS t5 
   WHERE t5.forumID = t1.forumID) AS numberofthreads,
 (SELECT COUNT(postID) 
    FROM xtblforumpost AS t7 
   WHERE t7.threadID IN 
      (SELECT t6.threadID 
         FROM xtblforumthread AS t6 
        WHERE t6.forumID = t1.forumID)) AS numberofposts 
  FROM xtblforum AS t1
  INNER JOIN xtblforumthread AS t2 ON t1.forumID = t2.forumID
  INNER JOIN xtblforumpost AS t3 ON t3.threadID = t2.threadID
  INNER JOIN tblmember AS t4 ON t4.memberID = t3.postedbymemberID
  WHERE t1.forumcategoryID = $categoryID 
    AND t1.visible = 1 
    AND t1.forumgroupID = ".$inline."
    and posted = 
        (select max(posted)
           from xtblforumpost
          where xtblforumpost.threadid in
            (select threadid
               from xtblforumthread
              where xtblforumthread.forumid = t2.forumid))
  ORDER BY t1.displayorder, 
        t3.posted DESC
```

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

## #3 — lillebror, 2006-10-13T06:19Z

Tack för hjälpen Lars!

Det var det här kodstycket som jag inte hade fått med:

```
and posted = 
        (select max(posted)
           from xtblforumpost
          where xtblforumpost.threadid in
            (select threadid
               from xtblforumthread
              where xtblforumthread.forumid = t2.forumid))
```

Det löste mitt problem! Nu visas allt som det ska! :)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/152376-hjälp-med-join
