---
title: "Hur radera poster, relaterade till andra poster?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/113999-hur-radera-poster-relaterade-till-andra-poster"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Palle"
published: "2004-10-20T14:40:45.000Z"
updated: "2004-10-27T07:17:03.000Z"
replies: 12
views: 493
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/113999-hur-radera-poster-relaterade-till-andra-poster"
---

# Hur radera poster, relaterade till andra poster?

## #1 — Palle, 2004-10-20T14:40Z

Hej,

Har stött på patrull när jag ska försöka radera poster från databasen (mySQL),
jag vet inte riktigt hur jag ska göra för att göra det riktigt smidigt. ;)

Jag har en dynamiskt *tree-navigation*, som på sidan kan se ut så här, ex.

```
[blue]+ Bilar
-- Kombi-modeller
-- + V40
-- + V50
-- + V70
--- + Interiör
--- + Exteriör
-- Sedan-modeller
+ Arbetsfordon
+ Traktorer
...[/blue]
```

Databasen ser ut så här:

```
[red]
id  |    cat_name    | cat_parent_id | cat_level_id
---------------------------------------------------
10  | Bilar          |     0         |      1
11  | Arbetsfordon   |     0         |      1
12  | Traktorer      |     0         |      1
13  | Kombi-modeller |     10        |      2
14  | Sedan-modeller |     10        |      2
15  | V40            |     13        |      3
16  | V50            |     13        |      3
17  | V70            |     13        |      3
18  | Interiör       |     17        |      4
19  | Exteriör       |     17        |      4
...[/red]
```

Jag stötte på patrull när jag nu försöker radera en hel kategori, ex. "Bilar",
som i exemplet ovan har en mängd underkategorier under sig.

Jag kan ju inte enbart gå på ID här utan det måste nog till en loop igenom hela
databasen för att kolla hur dom är relaterade till varande, annars kommer det bli
en massa spill kvar i databasen.. och det vill jag ju inte.

Någon som har nått bra tips eller idé på lösning?  :) 

&nbsp;

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

## #2 — Sebbe, 2004-10-20T14:59Z

Kan det här kanske funka? Har inte testat, men man kan ju hoppas. ;) (Om du inte ville ha det som en enda SQL-fråga?)

```
Sub DeleteTree(intId)
  strSQL = "SELECT id FROM tbl WHERE cat_parent_id = " & intId
  Set objRS = objConn.Execute(strSQL)

  If NOT objRS.EOF Then
    Do Until objRS.EOF
      DeleteTree objRS(0)
      objRS.MoveNext
    Loop
  End If

  objRS.Close : Set objRS = Nothing

  strSQL = "DELETE FROM tbl WHERE id = " & intId
  objConn.Execute(strSQL),,128
End Sub

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "..."
DeleteTree 10
objConn.Close : Set objConn = Nothing
```

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

## #3 — Palle, 2004-10-20T15:14Z

Hmm, nja.. det känns inte bra att göra så. ;)
Det blir sjukt många rundor den måste snurra för att plocka upp allt.

r/: Efter test får jag följande felmeddelande: Out of memory: 'objConnect.Execute'

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

## #4 — LarsG, 2004-10-20T21:13Z

<http://www.intelligententerprise.com/001020/celko.jhtml?_requestid=57016>

Det finns en relevant länk till i tråden om self-join.

Flyttas från ASP

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

## #5 — Palle, 2004-10-21T06:21Z

Hmm.. jag får inget på den sidan att fungera tyvärr. :r
Har du någon mer länk eller exempel som tar upp detta?

Jag kan lista relationerna, men jag får inte till hur jag ska lyckas få 
in id´t på den *parent*, med underkategorier, som jag vill radera.

```
[red]SELECT a.cat_name AS parent, b.cat_name AS child FROM tbl AS a, tbl AS b WHERE a.id = b.cat_parent_id;[/red]
```

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

## #6 — aasah, 2004-10-21T09:47Z

Hur ser din tabelldefinition ut? Om cat_parent_id är foreign key till id (vilket den borde vara), så borde väl en cascade on delete kunna hjälpa dig? :q

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

## #7 — Palle, 2004-10-21T14:16Z

Re: Hur radera poster, relaterade till andra poster?

> **Palle skrev:**
>
> Har stött på patrull när jag ska försöka radera poster från databasen (**mySQL**),
> jag vet inte riktigt hur jag ska göra för att göra det riktigt smidigt.

Eftersom mySQL ännu inte stödjer sub-querys, och således heller inte *cascade delete*, 
så är svaret på din fråga - Nej, det hjälper mig inte.

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

## #8 — Palle, 2004-10-22T09:22Z

Ok, om vi ändrar lite på min approach här. ;)
Säg att jag vill lista alla relaterade underkategorier till, ur mitt exempel, *Kombi-modeller*.

Hur ska jag då göra?
Tips?

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

## #9 — Palle, 2004-10-26T07:03Z

Någon som har nått konkret tips att bjuda på? :)

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

## #10 — Jesper T, 2004-10-26T21:44Z

Men det lär väl bli en rekursiv funktion i presentationslagret för att göra det.

```
Sub ShowTree(intId)
  strSQL = "SELECT cat_name,id FROM tbl WHERE cat_parent_id = " & intId
  Set RS = objConn.Execute(strSQL)

  If NOT objRS.EOF Then
    Do Until objRS.EOF
         Response.write(RS(0)&" | "& RS(1) &"<br>")
      ShowTree RS(0)
      objRS.MoveNext
    Loop
  End If
End Sub

Set objConn = Server.CreateObject("ADODB.Connection")
objConn.Open "..."
ShowTree 10
objConn.Close : Set objConn = Nothing
```

Eller tänker du på ngt annat?

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

## #11 — Palle, 2004-10-27T07:00Z

> **Jesper T skrev:**
>
> Men det lär väl bli en rekursiv funktion i presentationslagret för att göra det.
> 
> En massa kod..
> 
> Eller tänker du på ngt annat?

> **Palle skrev:**
>
> Hmm, nja.. det känns inte bra att göra så. ;)
> Det blir sjukt många rundor den måste snurra för att plocka upp allt.
> 
> r/: Efter test får jag följande felmeddelande: Out of memory: 'objConnect.Execute'

Nja, det där har jag ju redan testat och det fungerar inte.. :(

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

## #12 — Jesper T, 2004-10-27T07:06Z

Det kan vara att min kåd är felskriven men, skall du hämta alla underliggande "kategorier" så måste det väl vara någon form av rekursiv funktion. Eventuellt så kan man med en SP i MsSql göra det samma, vet inte riktigt.

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

## #13 — Palle, 2004-10-27T07:17Z

> **Jesper T skrev:**
>
> Det kan vara att min kåd är felskriven men, skall du hämta alla underliggande "kategorier" så måste det väl vara någon form av rekursiv funktion. Eventuellt så kan man med en SP i MsSql göra det samma, vet inte riktigt.

Nja.. jag hade, innan jag postade här, testat en liknande funktion.. men när funktionen gjort 
några 1000 loopar/execute så fick jag det där felmeddelandet.. så jag tror inte att en sådan 
funktion är tillräckligt stabil för att jag skulle använda den.  :OO 

Jag använder som sagt mySQL här så någon SP kan jag heller inte skapa. \*suck\* :x

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/113999-hur-radera-poster-relaterade-till-andra-poster
