---
title: "två blir ett ?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/179607-två-blir-ett"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Mr T"
published: "2009-07-30T16:42:02.000Z"
updated: "2009-09-14T17:10:03.000Z"
replies: 21
views: 1221
page: 1
pages: 2
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/179607-två-blir-ett"
---

# två blir ett ?

_Sida 1 av 2._

## #1 — Mr T, 2009-07-30T16:42Z

Har 2 tabeller för att skapa "virtuellt filsystem"

Förenklat ser dessa ut på följande sätt :
 Map
\*\*\*\*\*\*\*\*\*\*\*\*
id
parent_map_id
namn
\*\*\*\*\*\*\*\*\*\*\*\*

Fil
\*\*\*\*\*\*\*\*\*\*\*\*
id
parent_map_id
namn
\*\*\*\*\*\*\*\*\*\*\*\*

 Jag vill nu skapa en lista där jag bara vill visa X antal / sida. Det sätt jag tänkt mig är med hjälp av "limit". 
 För att det ska funka behöver jag lägga samman tabellerna. Jag vill att mapparna visas fösta och filer sedan.

Kommer i tanken såhär långt, men inte längre :

SELECT
map.id, map.parent_map_id,  map.namn,
(skapa en "mapp" parrameter)
fil.id, fil.parent_map_id,  fil.namn
FROM
map, fil
WHERE
map.parent_map_id = aktuell_map_id
AND
map.parent_map_id = aktuell_map_id
ORDER BY
(mappar ska visas först)
LIMIT 0, 25

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

## #2 — Peter S, 2009-07-30T17:03Z

```
select id
     , <aktuellt-mapp-id>
     , namn
     , 'mapp' as typ
  from map
 where parent_map_id = <aktuellt-mapp-id>
 union all
select id
     , <aktuellt-mapp-id>
     , namn
     , 'fil' as typ
  from fil
 where parent_map_id = <aktuellt-mapp-id>
order
    by case when typ = 'mapp' then 1 else 2 end
     , namn
 limit 0,25
```

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

## #3 — Mr T, 2009-08-14T12:02Z

Har ännu inte hunnit prova fullt ut men jobbar på det. (All tid bara försvinner. "Alla dessa dagar som kom och gick, inte visste jag att det var livet")

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

## #4 — Mr T, 2009-08-29T11:15Z

(Äntligen lite tid över...)

 Varför ska jag ha ett id nummer i efter id ? Menar du "parent_map_id" ?

 Inser att jag i "filer" kallar "name" för "content". Men borde väll gå att skriva "name as content" ?

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

## #5 — Peter S, 2009-08-29T11:18Z

Jag tog bara med alla fält i tabellerna; det går utmärkt att ta bort id från select-listorna  :)

Japp, namn kan du byta mot content.

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

## #6 — Mr T, 2009-09-01T07:49Z

Får det inte att funka alls. Mycket beroende på att jag inte helt är med på vad som "beordras" i SQL frågan.

 För att förenkla det lite för min över-kokta hjärna så skriver skriver jag in att fil namn heter "content" och att databaserna (tabellerna) heter "\_db" efter. 

Map_db
\*\*\*\*\*\*\*\*\*\*\*\*
id
parent_map_id
namn
\*\*\*\*\*\*\*\*\*\*\*\*

Fil
\*\*\*\*\*\*\*\*\*\*\*\*
id
parent_map_id
content
\*\*\*\*\*\*\*\*\*\*\*\*

 Tacksam för kommentarer till SQL förfrågan så jag själv vet vad jag har och på så sätt kan fel söka.

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

## #7 — Peter S, 2009-09-01T07:55Z

```
select id
     , namn as content
     , 'mapp' as typ
  from map_db
 where parent_map_id = <aktuellt-mapp-id>
 union all
select id
     , content
     , 'fil' as typ
  from fil_db
 where parent_map_id = <aktuellt-mapp-id>
order
    by case when typ = 'mapp' then 1 else 2 end
     , namn
 limit 0,25
```

Den första delen, ovanför "union all", hämtar alla mappar som ligger i mappen med id = \<aktuellt-mapp-id\>. Den andra delen, under "union all", hämtar alla filer i mappen med id = \<aktuellt-mapp-id\>. "Union all" slår samman resultaten till en lista, typ:

1 mapp1 mapp
2 mapp2 mapp
3 mapp3 mapp
1 fil1 fil
2 fil2 fil
3 fil3 fil

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

## #8 — Mr T, 2009-09-01T08:04Z

Bra, då vet ja att jag tänkte rätt. Så långt kom jag också. Dock blev jag osäker då det ändå inte funkade ändå, men det är bra att jag nu vet att jag tänker rätt. Ska klura lite till får vi se.

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

## #9 — nitro2k01, 2009-09-01T08:41Z

Ang. lagring av trädstrukturer i databaser råkade jag snubbla över denna presentation:
Bloginlägg: <http://www.alberton.info/talks_dpc_2009_wrapup.html>
Tillhörande slideshow: <http://www.slideshare.net/quipo/trees-in-the-database-advanced-data-structures?type=presentation>

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

## #10 — Mr T, 2009-09-04T09:56Z

Lite för avacnerade grejer för mitt lilla projekt. Intresant dock att se hur mycket SQL kan användas till då man själv bara sniffar lätt på ytan och knappt det.

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

## #11 — Mr T, 2009-09-04T17:15Z

Äntligen fick jag det att börja funka. Vet inte vad jag har gjort för skillnader innan, men nu börjar det funka i alla flal. 

 tack !

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

## #12 — Mr T, 2009-09-04T19:07Z

...ropa hej innan osv..... :-(

 Upptäcker 2 grejer som inte alls funkar. 

I Map är namn "varchar(255)" och i Fil, som inte har namn utan istället content, är det en "text". När jag tar "content as name" blir det bara "1" i "name" för filerna :-( 

Inser att raden "case when typ='mapp' then 1 else 2 end" inte funkar (hade tagit bort den och därför blivit glad när det äntligen hoppade igång). Kan det vara versionen av MySQL ? Spelar ingen roll då jag kan bara köra en "ORDER BY typ" så funkar det ändå.

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

## #13 — Mr T, 2009-09-04T19:38Z

Vänder på det!

Map
 namn varchar(255)

Fil
 content text

 istället för "content as name" i Fil gör jag "name as content" i Map ( och naturligtvis "ORDER BY content").

 Tyvärr är "1" det enda som finns i Fil "content".

Why !?!?!??!

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

## #14 — Mr T, 2009-09-07T09:14Z

Jag blir inte klok på detta !

(Skickar här med SQL frågan rakt av och hoppas att ni förstår tabell uppbyggnaden)

Denna ger "281" ur **name** när det är "fil", men helt okej på "mapp":

```
SELECT id, name, container_id, 'mapp' as typ FROM fw_container WHERE container_id=[I]281[/I] UNION ALL
SELECT id, container_id, [B]content as name[/B], 'fil' as typ from fw_content WHERE container_id=[I]281[/I]
ORDER BY typ DESC, name limit 0,25
```

Denna funkar inte alls:

```
SELECT id, name, container_id, 'mapp' as typ FROM fw_container WHERE container_id=[I]281[/I] UNION ALL
SELECT id, container_id, [B]content[/B], 'fil' as typ from fw_content WHERE container_id=[I]281[/I]
ORDER BY typ DESC, name, [B]content[/B] limit 0,25
```

Tacksam för hjälp.

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

## #15 — @nders, 2009-09-07T09:18Z

Du får ett resultatset - du kan ju inte ha olika fältnamn på dina två select-satser i din union.

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

## #16 — nitro2k01, 2009-09-07T09:46Z

Snanders spikar sanningen. Jag gissar att det du vill göra är typ detta:

```
SELECT id, name, container_id, null as content, 'mapp' as typ FROM fw_container WHERE container_id=281 UNION ALL
SELECT id, name, container_id, content, 'fil' as typ from fw_content WHERE container_id=281
ORDER BY typ DESC, name, content limit 0,25
```

Har för övrigt filerna inget eget namn?

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

## #17 — Mr T, 2009-09-12T08:30Z

Ska genast prova denna nya SQL förfrågan.

 Ang. namn i filer : När jag skapade tabellen ansåg jag att filerna inte behövde namn, men jag har insett att det nu vore bra, men då jag har ca 1000 poster nu vet jag inte om jag har ett bra sätt att fylla namnfältet automatiskt på.
 Kan man ta första raden i fältet content och automatsikt lägga in i fältet namn automatiskt ?

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

## #18 — Mr T, 2009-09-12T08:56Z

SUPER !!! med en liten "null as name" i fil frågan (tills jag får till ett namn fält med något i) så funkar det nu super ! 

 Ett jätte tack för hjälpen!

Nu är bara frågan hur man tar fram första raden (X antal tecken tills return) ur contetn och får den till fältet namn. Några ideer ?

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

## #19 — @nders, 2009-09-12T09:05Z

borde väl gå typ så här:

```
update fw_content set name = left(content, instr('\n'))
```

Gör en select på detsamma först så du ser om det blir rätt.

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

## #20 — Mr T, 2009-09-13T14:10Z

> **[@nders skrev:](https://www.webforum.nu/p/1480421)**
>
> borde väl gå typ så här:
>
>
> ```
> update fw_content set name = left(content, instr('\n'))
> ```
>
> 
> Gör en select på detsamma först så du ser om det blir rätt.

En mindre justering så funkade det perfeckt ! Stor tack ! 

```
update `fw_content` set name = left(content, instr(content,'\n')) WHERE 1
```

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/179607-två-blir-ett  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/179607-två-blir-ett/page2.md
