webForumDet fria alternativet

JOIN

9 svar · 328 visningar · startad av Kenchu

KenchuMedlem sedan apr. 2004113 inlägg
#1

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:

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

EitrazMedlem sedan sep. 2002366 inlägg
#2

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.

KenchuMedlem sedan apr. 2004113 inlägg
#3

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.

EitrazMedlem sedan sep. 2002366 inlägg
#4

Det blir rätt mycket ja :)

EitrazMedlem sedan sep. 2002366 inlägg
#5

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

KenchuMedlem sedan apr. 2004113 inlägg
#6

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

Hur gör jag det då? :)

EitrazMedlem sedan sep. 2002366 inlägg
#7
$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å ;)

KenchuMedlem sedan apr. 2004113 inlägg
#8

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

Aja, jag testar nu..

KenchuMedlem sedan apr. 2004113 inlägg
#9

Tack.... ;)

NiklassonMedlem sedan nov. 2000857 inlägg
#10

Tråden flyttas från PHP..

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