---
title: "Hämta det ena eller det andra"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/136486-hämta-det-ena-eller-det-andra"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "learn"
published: "2005-10-27T12:01:38.000Z"
updated: "2005-10-31T15:08:27.000Z"
replies: 18
views: 772
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/136486-hämta-det-ena-eller-det-andra"
---

# Hämta det ena eller det andra

## #1 — learn, 2005-10-27T12:01Z

Jag har en tabell som innehåller en sidas innehåll. Om användaren inte har skapat ett eget innehåll så ska default-innehållet visas. Jag vill alltså ha en query som i första hand hämtar användarens egna innehåll och om det inte finns så ska default-innehållet istället hämtas. Har användaren skapat ett eget så finns default fortfarande kvar. Hämta antingen det ena eller det andra, inte båda.

Hus ska jag formulera query:n?

Tabell: Sidor
Attribut: sidaID, skapareID, text

Default-innehållet har skapareID = 0

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

## #2 — learn, 2005-10-27T15:48Z

Ingen som vet hur man gör?

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

## #3 — Peter S, 2005-10-27T16:17Z

Du får nog ställa två frågor. Pseudokod:

```
r = select * from tabell where skapareid = <id>;

if empty(r)
  r = select * from tabell where skapareid = 0;
end
```

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

## #4 — learn, 2005-10-27T16:35Z

Ok, får köra på det då.

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

## #5 — LarsG, 2005-10-27T17:24Z

```
select *
 from t
where skapareid = <id>
 or (skapareid = 0 
  and not exists (select * 
     from t 
  where skapareid = <id>)
```

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

## #6 — Peter S, 2005-10-27T17:32Z

LarsG:  :bire

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

## #7 — learn, 2005-10-27T21:31Z

Såja, tackar!

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

## #8 — learn, 2005-10-30T19:35Z

Nähe vänta nu... Det fungerar bra om det endast är ett innehåll... Om en sida har flera innehåll så hämtas bara det ena... Den ska ju kunna ha tex. 2 egna innehåll och 3 default innehåll. Kanske var lite oklar... Hjälp!

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

## #9 — LarsG, 2005-10-31T09:13Z

Kan du ge exempel på datainnehåll och förväntat resultat?

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

## #10 — learn, 2005-10-31T09:43Z

Användarens sida loopar ut dess innehåll mha:

```php
while ($r = mysql_fetch_array($sql))
```

Låt säga att en sida innehåller 5st default-innehåll. Alla 5 + egen-skapade-innehåll ska loopas ut. Har användaren ändrat något default-innehåll så sparas detta som ett eget innehåll (default-innehållet förblir intakt men visas inte på sidan)...

Alltså en sida kan innehålla fler en ett innehåll, både default (id=0) och egna... Den kod jag fick av dig fungerar perfekt, men endast om det är ett innehåll.

Hoppas du förstår!

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

## #11 — learn, 2005-10-31T10:12Z

Sorry, jag insåg nu det paradoxala. Innehållen måste ju ha något gemensamt för att kunna uteslutas...

Återkommer ifall jag inte lyckas lösa det...

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

## #12 — learn, 2005-10-31T10:23Z

Nej, vänta nu föresten. Det ska ju gå tycker jag... Det som avgör och kan hålla innehållet i sär är dess typ. Så varje sida får inte innehålla innehåll av samma typ. 

Alltså:

Hämta text från sidor där id=\<id\> eller id=0 och typ inte finns med id=\<id\>

Hjälp mig!

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

## #13 — learn, 2005-10-31T11:40Z

Något sql-snille som har lust att hjälpa mig...?

Kort och konsist så vill jag:

> Hämta "text" från "contents" där "id" är "$id" eller där "id" är "0"
> 
> Finns både id=$id och id=0 på samma "typ" så skall endast posten med id=$id hämtas. Är det inte samma "typ" så skall båda hämtas - aldrig två av samma typ.

 

Någon måste ju veta hur man gör, please!

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

## #14 — LarsG, 2005-10-31T12:43Z

> Kan du ge exempel på datainnehåll och förväntat resultat?

Du har inte gett något exempel så jag förstår inte vad som är problemet med min ursprungliga fråga.

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

## #15 — learn, 2005-10-31T12:55Z

Ok, jag bifogar hela min kod:

```php
<?
// Hämtar innehåll
$sql= mysql_query("SELECT text FROM sidor WHERE sektion='1' AND userID='$_SESSION[userID]' OR userID='0' AND NOT EXISTS (SELECT userID FROM sidor WHERE userID='$_SESSION[userID]')");

// Loopar ut innehållet
while ($r = mysql_fetch_array($sql)) {
?>
	<p><?=$r["text"]?></p>
<?
}
?>
```

 
Detta skall då resultera i att sidan fylls med den text som är sparad i databasen för just denna användare. Koden ovan fungerar ifall användaren inte har något eget innehåll, men så fort denne har det så visas bara det och inte de andra default-innehållena.

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

## #16 — Peter S, 2005-10-31T13:05Z

Vad Lars menar med "datainnehåll" och "förväntat resultat", är att du skall posta exempelinnehåll från tabellen:

```
id | name | address
-------------------
1  | foo  | bar
-------------------
2  | ...  | u.s.w.
-------------------
```

Samt hur du förväntar dig att resultatet skall bli:

```
id | name
---------
1  | foo 
---------
7  | faa 
---------
9  | ...
---------
```

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

## #17 — learn, 2005-10-31T13:18Z

Heh, sorry.

> id \| text   \| typ
> \-------------------
> 0  \| hej    \| överst
> \-------------------
> 1  \| blabla \| överst
> \-------------------
> 0  \| blabla \| nederst

 
Om användaren har id 1 så ska det bli:

> id \| text  
> \-----------
> 1  \| blabla
> \-----------
> 0  \| blabla

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

## #18 — Peter S, 2005-10-31T14:44Z

```
select c.id
     , c.text 
  from contents c
 where c.id = <id>
    or ( c.id = 0
         and c.typ not in ( select c2.typ
                              from contents c2
                             where c2.id = <id>))
```

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

## #19 — learn, 2005-10-31T15:08Z

Funka kanonfint, äntligen! Tack :)   :birp

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/136486-hämta-det-ena-eller-det-andra
