webForumDet fria alternativet

Lista frågor & svar med ev. följdfrågor

Databaser & SQL

2 svar · 205 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Har stött på patrull!
Fakta:
Två tabeller: Frågor och svar.
En fråga har x antal svar.
Ett svar kan ha följdfråga som i sin tur har x antal svar.

Jag tänkte att en CTE skulle passa för ändamålet men kommer inte på hur det skulle kunna se ut.
Har kommit så här långt:

WITH CTE_Questions
AS
(
	SELECT q.QuestionId, q.ParentId, q.Question, a.AnswerId, a.Answer
	FROM Booking_Scenarios_QuestionsTmp q
	INNER JOIN Booking_Scenarios_AnswersTmp a ON q.QuestionId = a.QuestionId
	WHERE q.ParentId IS NULL

	UNION ALL
	SELECT q.QuestionId, q.ParentId, q.Question, a.AnswerId, a.Answer
	FROM Booking_Scenarios_QuestionsTmp q
	INNER JOIN Booking_Scenarios_AnswersTmp a ON q.QuestionId = a.QuestionId
	INNER JOIN CTE_Questions cte ON a.AnswerId = cte.ParentId
)
SELECT * FROM CTE_Questions

De kolumner som är intressanta är QuestionId, ParentId samt AnswerId.
q.ParentId relaterar till a.AnswerId, dvs. om ParentId inte är null så är det en följfråga till ett svar.

Koden ovan listar nu bara frågor och svar där ParentId är null, dvs. huvudfrågor. Inga följdfrågor listas.
Mao. all kod under UNION ALL körs ej då ParentId i koden ovan alltid är null!

Nån som kan trasla ut härvan? :)

Medlem sedan juni 20003 076 inlägg
#2

Hmm, jag får fan inte till det.
Skulle verkligen behöva en hjälpande hand! :)

Ni behöver inte låsa upp er på en CTE, det kanske inte är vägen att gå.

Resultatet ska t.ex. bli så här:

Fråga 1
	Svar 1.1
	Svar 1.2
			Fråga 1.2
				Svar 1.2.1
				Svar 1.2.2
				Svar 1.2.3
	Svar 1.3

Fråga 2
	Svar 2.1
	Svar 2.2
	
	
Ihopdraget skulle det se ut så här:

Fråga 1
Svar 1.1
Svar 1.2
Fråga 1.2
Svar 1.2.1
Svar 1.2.2
Svar 1.2.3
Svar 1.3
Fråga 2
Svar 2.1
Svar 2.2
Medlem sedan juni 20003 076 inlägg
#3

Jag fyller väl på med info till nån vänlig själ kommer med en lösning! :)

Jag har nu ritat om databasen lite, flyttat Parentid från Questiontabell till Answertabellen istället.
Jag tror att det är mer logiskt (men ej säker), så här ser databasen ut nu och svaret jag vill få ut.
Så det är alltså en skön selectsats jag behöver (troligtvis en cte)!

Questions
---------------------------------------------------------------
QuestionId      Question
1                   Fråga 1
2                   Fråga 2
3                   Fråga 1.1

Answers
---------------------------------------------------------------
AnswerId         QuestionId   Answer          ChildId
1                   1                Svar 1           null
2                   1                Svar 2           3
3                   1                Svar 3           null
4                   3                Svar 1.1         null
5                   3                Svar 1.2         null

Fråga 1
		Svar 1
		Svar 2
			Fråga 1.1
				Svar 1.1
				Svar 1.2
		Svar 3
		
Fråga 2
258 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
123 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)