---
title: "Loopa ut en relationsdatabas?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/187019-loopa-ut-en-relationsdatabas"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "Hamatzu"
published: "2011-05-25T09:50:30.000Z"
updated: "2011-05-26T09:01:25.000Z"
replies: 10
views: 2578
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/php/187019-loopa-ut-en-relationsdatabas"
---

# Loopa ut en relationsdatabas?

## #1 — Hamatzu, 2011-05-25T09:50Z

Hej, försöker mig på att hämta data utifrån en relationstabell. Tycker att denna kod borde fungera men det gör den inte.

Jag hämtar först alla skådespelare, sedan är tanken att jag i relationstabellen som innehåller actorId och movieId ska hämta alla filmer som skådespelaren medverkar i. Jag kan inte hitta några fel i denna kod, eller kanske tänker jag helt fel logiskt sett?

Har följande kod:

```php
<?php
					$query = "SELECT * FROM actor ORDER BY firstName ASC";
					$result = mysql_query($query);
					
					while($r = mysql_fetch_assoc($result))
					{
						$actorId = $r['actorId'];
						$firstName= $r['firstName'];
						$lastName = $r['lastName'];
						
						
						echo "<tr>";
						echo "<td>" .$firstName. "</td>";
						echo "<td>" .$lastName. "</td>";
						echo "<td>";
						$queryActor = "SELECT movieId FROM rel_actor WHERE actorId='".$actorId."'";
						$resultActor = mysql_query($queryActor);
							while ($r2 = mysql_fetch_assoc($resultActor))
							{
								$movieId = $r2['movieId'];
								$queryMovie = "SELECT * FROM movie WHERE movieId='".$movieId."'";
								$resultMovie = mysql_query($queryMovie);
								$r3 = mysql_fetch_assoc($resultMovie);
								
								$title = $r3['title'];
								
								echo $title;
							}
						echo "</td>";
						echo "</tr>";
					}
				?>
```

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

## #2 — erciz, 2011-05-25T12:26Z

Vad får du för felmeddelande från mysql_error() ?

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

## #3 — fiddler, 2011-05-25T13:45Z

Skrivs någonting ut? Förnamn, efternamn?

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

## #4 — casca, 2011-05-25T14:00Z

Testa att printa SQL-queryn med echo eller liknande, så ser du vad som händer lite bättre.

```php
echo "SELECT movieId FROM rel_actor WHERE actorId='".$actorId."'";
```

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

## #5 — @nders, 2011-05-25T15:17Z

Jag skulle föreslå att skriva om hela klabbet. Allt bör hämtas i en enda sql-fråga. Att ställa frågor i en loop är nästan alltid fel. 

Så skriv om det till en fråga där du joinar ihop alla tabellerna.

Mvh

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

## #6 — Hamatzu, 2011-05-26T07:29Z

> **[erciz skrev:](https://www.webforum.nu/p/1535287)**
>
> Vad får du för felmeddelande från mysql_error() ?

Jag får inget felmeddelande alls.

> **[fiddler skrev:](https://www.webforum.nu/p/1535291)**
>
> Skrivs någonting ut? Förnamn, efternamn?

Förnamn och efternamn skrivs ut.

> **[@nders skrev:](https://www.webforum.nu/p/1535295)**
>
> Jag skulle föreslå att skriva om hela klabbet. Allt bör hämtas i en enda sql-fråga. Att ställa frågor i en loop är nästan alltid fel. 
> 
> Så skriv om det till en fråga där du joinar ihop alla tabellerna.
> 
> Mvh

Hur skulle detta kunna se ut? Har försökt mig på join-satser förut, men har aldrig riktigt greppat det hela.

Har även testat att printa ut sql-satserna och de ser ut som dom ska :)

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

## #7 — @nders, 2011-05-26T07:38Z

> **[Hamatzu skrev:](https://www.webforum.nu/p/1535311)**
>
> Hur skulle detta kunna se ut? Har försökt mig på join-satser förut, men har aldrig riktigt greppat det hela.

Kör en SQL-fråga som denna:

```
SELECT a.*, m.* 
FROM actor a 
INNER JOIN rel_actor r
	ON r.actorId = a.actorId
INNER JOIN movie m
	ON m.movieId = r.movieId
ORDER BY a.firstName ASC
```

Sedan får du fixa till presentationen i PHP så du får utskrifterna som du vill ha dem - ex. bara skriva ut skådespelaren en gång och sedan en lista på filmerna.

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

## #8 — Hamatzu, 2011-05-26T07:58Z

Är det någon skillnad på hur man loopar ut det när man skriver en join-sats? 

Får detta felmeddelande:

```
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in
```

```php
$query = "SELECT a.*, m.* 
								FROM actor a 
								INNER JOIN rel_actor r
									ON r.actorId = a.actorId
								INNER JOIN movie m
									ON m.movieId = r.movieId
								ORDER BY a.firstName ASC";
					$result = mysql_query($query);
					
					while($r = mysql_fetch_assoc($result))
					{
						$firstName= $r['firstName'];
						$lastName = $r['lastName'];
						
						
						echo "<tr>";
						echo "<td>" .$firstName. "</td>";
						echo "<td>" .$lastName. "</td>";
						echo "<td>";
					
					}
					
						echo "</td>";
						echo "</tr>";
```

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

## #9 — @nders, 2011-05-26T08:15Z

Prova att köra SQL-frågan direkt i phphmyadmin (eller vad du nu använder för att administrera databasen). Kanske har jag (eller du) skrivit fel på något tabell- eller fältnamn i frågan.

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

## #10 — Hamatzu, 2011-05-26T08:37Z

GAAAHHH!!!!  :bla

Hej, och tack för all hjälp! När jag testade att köra din sql-fråga i phpmyadmin så upptäckte jag att den klagade på att en kolumn inte fanns, hade skrivit moveId istället för movieId i databastabellen...  :r

Så mitt första inlägg fungerar som det ska! :)

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

## #11 — @nders, 2011-05-26T09:01Z

> **[Hamatzu skrev:](https://www.webforum.nu/p/1535320)**
>
> Så mitt första inlägg fungerar som det ska! :)

Gör om det ändå. Och ta för vana att lägga in felutskrifter från mysql_query().

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

---

Tråden på webben: https://www.webforum.nu/amne/php/187019-loopa-ut-en-relationsdatabas
