---
title: "JOIN"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/113411-join"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Kenchu"
published: "2004-10-12T14:20:05.000Z"
updated: "2004-10-14T08:14:10.000Z"
replies: 9
views: 355
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/113411-join"
---

# JOIN

## #1 — Kenchu, 2004-10-12T14:20Z

Har en databas med följande tabeller och fält:

question
id \|\| question

alternative
id \|\| question_id \|\| alternative

answer
id \|\| alternative_id

Ni har säkert redan räknat ut vad det här rör sig om, och relationerna mellan tabellerna, men för att göra det hela lite tydligare kan jag förklara ändå:

Vad jag försöker göra är en poll. Varje fråga (question) från tabellen question har ett id, som används i tabellen alternative i fältet question_id. Dvs, om en fråga har id:et 1, och några inlägg i tabellen alternativ har question_id 1, så hör dessa tabeller ihop på det stället. I answer sparas alla röster. Tabellen har ett id, precis som alla andra, och ett fält som heter alternative_id, där alternativet för frågan som användaren skickat in sparas.

När jag försöker göra ett formulär av tabellerna question och alternativ, så stöter jag på ett problem, nämligen att frågan fortsätts att skrivas ut efter varje alternativ.

Detta:

```php
		$result = mysql_query("
					SELECT question.question, alternative.alternative
					FROM question
					LEFT JOIN alternative
					ON question.id = alternative.question_id
					");
				
				while ($row = mysql_fetch_array($result)) {
					echo $row["question"]. "<br>";
					echo "<input type=\"radio\" name=\"blah blah\" title=\"Holy shit\">". $row["alternative"]. "</input>";
				}
```

kan ge tex:

Fråga
 alt Fråga
 alt Fråga
 alt Fråga

Men det är ju inte så jag vill ha det. :) Jag vill ha:

Fråga
 alt
 alt
 alt

Nästa fråga
 alt
 alt
 alt

Vet inte riktigt hur jag ska göra för att få till detta! Borde ju ha något med en while-sats inuti while-satsen att göra, men vad jag behöver skriva för att få det resultat jag vill.. tja, det vet jag som sagt inte. :)

Vore grymt tacksam för svar. :)

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

## #2 — Eitraz, 2004-10-12T18:17Z

Varför inte bara dela upp problemet och göra en SQL-sats för frågorna och göra en inre SQL-sats för alternativen (hemskt och usch att ha en inre SQL-sats, men men :)).

Det du gör nu är att du skriver ut endast frågan och Ett alternativ eftersom du inte gör någon som helst loop över alternativen, bara frågorna.

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

## #3 — Kenchu, 2004-10-12T19:34Z

Eitraz,
jepp, och eftersom jag inte kunde komma längre än så stannade jag där. :)

Njae, en inre sql sats... lite jobbigt med 20 frågor då. :) Sidan kommer ladda ooootroligt länge.

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

## #4 — Eitraz, 2004-10-12T19:37Z

Det blir rätt mycket ja :)

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

## #5 — Eitraz, 2004-10-12T19:45Z

Så här kan du ju göra, om du inte redan gjort det nu ;)

```
SELECT A.alternative, Q.question FROM question AS Q RIGHT JOIN alternative AS A ON Q.id = A.question_id ORDER BY Q.question
```

och sen i varje "loop" kollar du om frågan är samma som föregående, är den Inte det skriver du ut både frågan och alternativet, annars bara alternativet..

Om detta är så effektivt kan man väll diskutera, men det funkar ju.

Är visst nästan samma SQL sats som du hade ovan ser jag, tittade inte så mycket där nu ;)

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

## #6 — Kenchu, 2004-10-12T20:01Z

*".. kollar du om frågan är samma som föregående..."*

Hur gör jag det då? :)

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

## #7 — Eitraz, 2004-10-12T20:05Z

```php
$lastquestion = "";
$query = mysql_query("SELECT A.alternative, Q.question FROM question AS Q RIGHT JOIN alternative AS A ON Q.id = A.question_id ORDER BY Q.question");
while ($row = mysql_fetch_array($query)) {
	if ($row["question"] != $lastquestion) {
		$lastquestion = $row["question"];
		print "<br>$lastquestion<br>";
	}
	print $row["alternative"] . "<br>";
}
```

ganska exakt som din förra kod alltså ;)

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

## #8 — Kenchu, 2004-10-12T20:07Z

Funkar verkligen det där? Hur ska *den* fatta att den $row\["question"\] du nämner är den gamla? :P

Aja, jag testar nu..

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

## #9 — Kenchu, 2004-10-12T20:15Z

Tack.... ;)

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

## #10 — Niklasson, 2004-10-14T08:14Z

Tråden flyttas från PHP..

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/113411-join
