webForumDet fria alternativet

Hämta från två tabeller?

Databaser & SQL

10 svar · 303 visningar · startad av streetrobban

Medlem sedan jan. 20011 140 inlägg
Frågan#1

Tja, jag har sökt i forumet men endå inte fått till det.

Jag skriver ut artister på min sida, och vill under loopen hämta information från en annan tabell i databasen. Hur gör man detta, prövade något sånt här men det funkade inte:

SELECT samples.artist, samples.låtnamn FROM samples INNER JOIN artist.namn WHERE artist.namn = 'samples.artist' ORDER BY id

Jag har inte använd JOIN förut, så jag vet inte hur det funkar, kan någon snäll själ förklara? :)

Medlem sedan mars 20025 907 inlägg
#2
select samples.artist, samples.låtnamn, artist.namn from samples, artist
where artist.namn = samples.artist order by id
Medlem sedan jan. 20011 140 inlägg
#3

Jag har ju två tabeller:

SAMPLES där 'artist' och 'låtnamn' ska hämtas, och sedan ska man hämta 'namn' från tabellen ARTISTER WHERE samples.artist = 'artister.namn'.

Hur gör jag det? :)

Medlem sedan juni 200032 967 inlägg
#4

Två spontana frågor då:

  1. Funker inte Peeers exempel?
  2. Funkar inte SQL-forumet? ;)

Mvh :)

Medlem sedan mars 20025 907 inlägg
#5

Que? Fungerade inte koden ovan? Den plockar ut artist och låtnamn från samples och ifrån tabellen artist så plockas namn ut. Dock bara på de ställen där värdet i artist.namn överrensstämmer med samples.artist.

Var det inte så du skulle ha det?

Medlem sedan jan. 20011 140 inlägg
#6

Ok, ok...

Det funkar inte riktigt som jag vill. Ungefär så här ser koden ut.

<?php
// Öppna databasen
require 'inc/db.php';

$sql = "SELECT * FROM artister ORDER BY id";
$resultat = @mysql_query($sql) or die ("Kunde inte hämta dina uppgifter.");
$varannan = "2";

while ($rad = mysql_fetch_array($resultat)) 
{
	if ($varannan == "1") 
	{
		echo "$rad[namn]";
		
		$sql = "SELECT samples.artist, samples.låtnamn, artister.namn FROM samples, artister WHERE artister.namn = samples.artist ORDER BY id";
		$resultat = @mysql_query($sql) or die ("Kunde inte hämta dina uppgifter.");
		while ($rad = mysql_fetch_array($resultat)) 
		{
			echo "".$rad['låtnamn']."<br>";
		}
		
		$varannan = "2";
	}
	else 
	{
		echo "$rad[namn]";
		
		$sql = "SELECT samples.artist, samples.låtnamn, artister.namn FROM samples, artister WHERE artister.namn = samples.artist ORDER BY id";
		$resultat = @mysql_query($sql) or die ("Kunde inte hämta dina uppgifter.");
		while ($rad = mysql_fetch_array($resultat)) 
		{
			echo "".$rad['låtnamn']."<br>";
		}
		
		$varannan = "1";
	}
}

// Stäng databasen
mysql_close($open);
?>

Det är bara de två första posterna som skrivs ut, utan artisternas låtar som ska hämtas från den andra tabellen.

Medlem sedan nov. 2000857 inlägg
#7

Tråden flyttas från PHP..

Medlem sedan dec. 200012 464 inlägg
#8

Hur är tabellerna definierade? Ge lite exempel på data.

Det verkar befängt att joina artist.namn med sample.artist och sedan hämta båda kolumnerna.

Medlem sedan jan. 20011 140 inlägg
#9

På min sida listar jag diverse artister, och korta låtsnuttar på musik de gjort.

I ena tabellen 'ARTISTER' (artister.namn), finns det info om artisterna, och i den andra tabellen 'SAMPLES' (samples.artist, samples.låtnamn) så sparas artist-namn och genvägar till deras låtsnuttar.

Jag vill alltså;

  1. Hämta information om artisterna från tabellen 'ARTISTER' och skriva ut det på sidan.
  2. Leta i tabellen 'SAMPLES' (består av genvägar till mp3-filer) efter artistens namn (artister.namn = samples.artist) och skriva ut det på sidan (samples.låtnamn).

artister
id
namn
url
bild
beskrivning
tid
datum

samples
id
artist
låtnamn

LarsG - Jag vill hämta data från tabellen 'SAMPLES' där samples.artist är samma som artister.namn. Så att man får rätt låtar på rätt artist :)

Medlem sedan maj 20018 027 inlägg
#10

Vad händer om du har råkat stava artistens namn fel i tabellen "samples"? Egentligen borde du koppla ihop tabellerna genom att använda en "foreign key" till tabellen "artist"s primärnyckel. Om nu samples.artist hade innehållit en referens till artist.id, istället för artistens namn, hade du kunnat använda följande fråga:

select samples.låtnamn, artist.namn from samples, artist
where artist.id = samples.artist
Medlem sedan jan. 20011 140 inlägg
#11

Det går inte att stava fel, det blir alltid samma namn. Men jag ska testa med den där SQL-satsen och se om det funkar.

259 ms totalt · 4 externa anrop · v20260731065814-full.e96017d9
120 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)