---
title: "Optimera kod, slå ihop tre frågor till en?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/179633-optimera-kod-slå-ihop-tre-frågor-till-en"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "MickeA.com"
published: "2009-08-03T08:29:12.000Z"
updated: "2009-08-04T10:47:19.000Z"
replies: 4
views: 528
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/179633-optimera-kod-slå-ihop-tre-frågor-till-en"
---

# Optimera kod, slå ihop tre frågor till en?

## #1 — MickeA.com, 2009-08-03T08:29Z

Hej,

Har idag ett script för att lista massa data från en MySQL (5.0) databas. Så här ser databasen ut:

```
[i]doc_lang[/i]
lang_id, INT
land_name, VARCHAR

[i]doc_access[/i]
user_id, INT
lang_id, INT

[i]doc_page[/i]
page_id, INT
page_parent, INT (alltid = 3 för tillfället)
page_name, VARCHAR

[i]doc_name[/i]
doc_id, INT
doc_parent, INT ([i]doc_page.page_id[/i])
doc_name, VARCHAR

[i]doc_content[/i]
cont_id, INT
cont_parentid, INT ([i]doc_name.doc_id[/i])
cont_language, INT ([i]doc_lang.lang_id[/i])
cont_text, TEXT
cont_updated, INT (UNIX_TIMESTAMP)
```

Det jag nu ska göra är att:

- Hämta alla page_name, doc_name, lang_name (som man har behörighet att se)
- Lista allt från *doc_content* som tillhör resp. sida / språk
- Endast den senaste versionen från *doc_content* ska hämtas

Går det här att få ihop till en fråga med flera JOIN?
Just nu körs som sagt 3 olika sqlfrågor och sidan tar uppåt 2 minuter att ladda, och det är inte så effektivt.

Kör med PHP 5 / MySQL 5

Tack!

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

## #2 — clarkbones, 2009-08-03T09:43Z

Den här borde fixa sista delfrågan:

select \* from doc_content
dc1 where cont_updated=(select max(cont_updated) from doc_content dc2
where dc1.cont_id=dc2.cont_id)

Denna är sedan bara att joina mot de övriga tabellerna. OBS! Är inte van vid annat än T-SQL syntax.

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

## #3 — MickeA.com, 2009-08-03T15:48Z

Jo, det där är den del av frågan som jag redan har koll på, tack.
Det är "resten" som är lite problematiskt.

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

## #4 — Peter S, 2009-08-03T16:21Z

```
select p.page_name
     , n.doc_name
     , l.lang_name
  from doc_page p
inner
  join doc_name n
    on p.page_id = n.doc_parent
inner
  join doc_content c
    on n.doc_id = c.cont_parentid
inner
  join doc_lang l
    on c.cont_language = l.lang_id
 where l.lang_id
    in ( select lang_id
           from doc_access
          where user_id = <user-id> )
   and c.cont_updated
     = ( select max(cont_updated)
           from doc_content
          where cont_parentid = c.cont_parentid )
```

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

## #5 — MickeA.com, 2009-08-04T10:47Z

Det funkar nästan, kom på att det nog inte funkar med en fråga. Om ni kollar den bifogade bilden, så skrivs allt ut idag.

Det som är *My account* är *page_name* och *Account updated* är *doc_name*.

Där *cont_id* inte existerar för nuvarande *cont_parentid* samt *cont_language* ska en "tom" ruta likt den gråa dyka upp.

Måste även presentera alla språk innan varje kategori, så det är nog tveksamt om jag klarar mig på en fråga.

Problemet jag har nu är att jag loopar igenom **alla** doc_page och inuti den loopen har jag en for-loop där jag kör igenom alla språk och det är väldigt ooptimalt och säkert helt onödigt, men jag har slut på idéer.

Tacksam för några förslag.

Bilagor:

- [screenshot.trans.overview.gif](https://www.webforum.nu/a/20588.gif)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/179633-optimera-kod-slå-ihop-tre-frågor-till-en
