webForumDet fria alternativet

Loopa ut en relationsdatabas?

PHPur PHP

10 svar · 2 564 visningar · startad av Hamatzu

Medlem sedan mars 2005232 inlägg
Frågan#1

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
					$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>";
					}
				?>
Medlem sedan maj 20011 826 inlägg
#2

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

Medlem sedan juli 20023 617 inlägg
#3

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

Medlem sedan feb. 20005 891 inlägg
#4

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

echo "SELECT movieId FROM rel_actor WHERE actorId='".$actorId."'";
Medlem sedan juni 200032 967 inlägg
#5

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

Medlem sedan mars 2005232 inlägg
#6

erciz skrev:

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

Jag får inget felmeddelande alls.

fiddler skrev:

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

Förnamn och efternamn skrivs ut.

@nders skrev:

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 :)

Medlem sedan juni 200032 967 inlägg
#7

Hamatzu skrev:

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.

Medlem sedan mars 2005232 inlägg
#8

Ä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
$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>";
Medlem sedan juni 200032 967 inlägg
#9

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.

Medlem sedan mars 2005232 inlägg
#10

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! :)

Medlem sedan juni 200032 967 inlägg
#11

Hamatzu skrev:

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().

135 ms totalt · 3 externa anrop · v20260731065814-full.b746b907
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)