Hjälp med SQL Join eller vad det nu kan bli

Här diskuteras programmering och utveckling
Emil.s
Inlägg: 6633
Blev medlem: 12 dec 2006, 23:20
OS: Ubuntu
Ort: /Dalarna/Hedemora/
Kontakt:

Hjälp med SQL Join eller vad det nu kan bli

Inlägg av Emil.s »

Håller på med ett litet frågesports-spel som databas projekt, och jag har 2 databaser. 1 med frågorna, och 1 med kategorierna.

Kategoritabellen ser ut som följande:
ID (INTEGER - auto increment)
kategorinamn (VARCHAR)
beskrivning (VARCHAR)

Och frågetabellen ser ut så här:
ID (INTEGER - auto increment)
Frågan: (fraga/VARCHAR)
Rätt svar: (svar/VARCHAR)
Svårighetsgrad: (niva/VARCHAR)
Kategori: (kategori/VARCHAR)

I exemplet så har vi kategorin "GNU/Linux" (kategorinamn) med ID=1.

Koden för att lägga till frågor ser ut så här:

Kod: Markera allt

    <form name="katbox" method="post" action="">
   <table>
    <tr><td>Fråga:</td><td><textarea name="fraga" rows="5" cols="50"></textarea></td></tr>  
    <tr><td>Kategori:</td><td>
    <select name="kategori">
    <option>Välj här</option>
    <?php
    // Här ska kategorinamnen tas från katogorier/kategorinamn. Sen ska frågan läggas in med kategoriers ID som kategori i fragor.
    $select = "select * from kategorier";
    $query = mysql_query($select);
    if(mysql_num_rows($query)) {
      while($row = mysql_fetch_assoc($query) ) { 
	echo "<option>$row[kategorinamn]</option>";  
	} }
  ?>
    <input type="button" value="Lägg till ny Kategori" onklick="window.location.href='hanterakat.php'">
    </select>
    </td></tr>
    <tr><td>Svårighetsgrad:</td><td><select name="niva"><option>1</option><option>2</option><option>3</option><option>4</option><option>5</option></select></td></tr>
    <tr><td>Svar:</td><td><textarea name="svar" rows="5" cols="50"></textarea></td></tr>
    <tr><td> </td><td><input type="submit" value="Lägg till fråga" /></td></tr>
   </table>
  </form>
Senare läggs datan in genom att anropa:

Kod: Markera allt

$result = mysql_query( "insert into fragor ( fraga, kategori, svar, niva ) values ('" . $fraga . "', '" . $kategori . "', '" . $svar . "', '" . $niva . "')", $db );
		if( $result == false ) {
			die( "No results from DB : " . mysql_error( $db )	 );
		}
Och efter det så visas en lista med alla frågor med följande:

Kod: Markera allt

while.... print "<tr><td>Fråga: </td><td>" . $row["fraga"] . "</td><tr><td>Kategori: </td><td>" . $row[ "kategori" ] *mer kod...*
Problemet nu är ju att det kommer att stå "GNU/Linux" som en VARCHAR i tabellen med frågor. Jag vill att när man vart "GNU/Linux" i drop-boxen, så ska IDt från kategoritabellen (1), skickas in som kategori i frågetabellen, och när allt visas sen så ska koden hämta frågorna, och automatiskt ersätta ID-nummret med "kategorinamn" på något sätt.

Hur löser man detta på ett vettigt sätt? :P
Home sweet ~/ = http://sandnabba.se
KiviE
Inlägg: 2157
Blev medlem: 25 okt 2007, 14:00
OS: Ubuntu
Utgåva: 22.04 Jammy Jellyfish LTS
Ort: Luleå

Re: Hjälp med SQL Join eller vad det nu kan bli

Inlägg av KiviE »

Emil.s skrev: Kategoritabellen ser ut som följande:
ID (INTEGER - auto increment)
kategorinamn (VARCHAR)
beskrivning (VARCHAR)

Och frågetabellen ser ut så här:
ID (INTEGER - auto increment)
Frågan: (fraga/VARCHAR)
Rätt svar: (svar/VARCHAR)
Svårighetsgrad: (niva/VARCHAR)
Kategori: (kategori/VARCHAR)
Vet inte om jag har fattat dig rätt men tabellerna är hopkopplade med de fälten som jag har markerat med fet stil?

Isf skulle jag föreslå att du istället kopplar ihop så här:
Kategoritabellen ser ut som följande:
ID (INTEGER - auto increment)
kategorinamn (VARCHAR)
beskrivning (VARCHAR)

Och frågetabellen ser ut så här:
ID (INTEGER - auto increment)
Frågan: (fraga/VARCHAR)
Rätt svar: (svar/VARCHAR)
Svårighetsgrad: (niva/VARCHAR)
Kategori: (kategori/INTEGER)
En innerjoin skulle då se ut något så här:
SELECT * FROM kategorier INNER JOIN fragor ON kategorier.ID = fragor.kategori

Nu heter ID samma i båda vilket medför en liten krock. Var länge sedan jag skrev sql frågor så kommer inte ihåg vilket ID den väljer men det kan du själv mappa om i sqlfrågan om det skulle behövas.
zoombywoof
Inlägg: 202
Blev medlem: 27 nov 2006, 16:14
OS: Kubuntu
Ort: Stockholm

Re: Hjälp med SQL Join eller vad det nu kan bli

Inlägg av zoombywoof »

om du kopplar tabellerna som Kivie skrev så kan du få ut kategorinamnet på följande sätt:

Kod: Markera allt

select F.fraga,F.svar,F.niva,K.kategornamn from Fragor F, Kategorier K
where K.id=Fragor.kategori
Du bör också kanske överväga att sätt referens mellan kategori id'na så att du inte av misstag får en inkonsistent databas.

Kod: Markera allt

Ex.
Create table Fragor
id int auto,
fraga varchar,
svar varchar,
niva varchar,
kategori int,
FOREIGN KEY (kategori) REFERENCES Kategorier(id) ON DELETE CASCADE
/zw
Skriv svar

Återgå till "Programmering och webbdesign"