webForumDet fria alternativet

SQL sats till ett forum

Databaser & SQLur Databashanterare & SQL

6 svar · 315 visningar · startad av Wiklund!!

Medlem sedan juli 2002549 inlägg
Frågan#1

Försöker bygga upp ett forum i asp. Problemet är när jag ska visa trådarna och dess senaste svar.

Har två tabeller till forumet och en med användarna.

Forum (tabell för trådarna):
id
date
message
title
fromid
forum (rum)
replies
seen

Forumreplies (tabell för svaren på trådarna)
id
date
fromid
topicid
message
title

Users (tabell för användarna)
id
osv..

Har försökt med denna inner join sql sats:

SQL = "select users.*, forum.*, forumreplies.* "& _
	" From forum ft inner join forumreplies fp "& _
	" on ft.id = fp.topicid and fp.date = ft.date "& _
	" inner join users u2 on u2.id = fp.fromid "& _     
	" inner join users u1 on u1.id = ft.fromid "& _
	" WHERE ft.forum = 'Skateboard'"

Men det fungerar inte så bra. Får felmesset:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E21)
ODBC-drivrutinen stöder inte de begärda egenskaperna.
Medlem sedan dec. 20003 887 inlägg
#2

Vilket skumt felmeddelande... kör du Access som DBMS så saknar du paranteser.

SQL = "select u2.*, ft.*, fp.* "& _
	" From [b](([/b]forum ft inner join forumreplies fp "& _
	" on [b]([/b]fp.topicid = ft.id and fp.date = ft.date[b]))[/b] "& _
	" inner join users u2 on u2.id = fp.fromid[b])[/b] "& _     
	" inner join users u1 on u1.id = ft.fromid "& _
	" WHERE ft.forum = 'Skateboard'"

Annars vet jag inte. SQL Server ska väl fixa den frågan utan bekymmer? MySQL har jag däremot ingen aning om.

Det sista jag kommer att tänka på är att date är ett reserverat ord och bör ej användas som kolumnnamn.

Red.: Morgontrött... ändrade lite på frågan. Nu känner jag mig helt vilse ;)

Medlem sedan juli 2002549 inlägg
#3

Använder mySQL. Har testat att byta namn på date men det strular till sig endå.

Medlem sedan mars 20034 471 inlägg
#4

Funkar följande:

SQL = "select u2.*, ft.*, fp.* "& _
" From forum ft, forumreplies fp, users u2, users u1"& _
" where fp.topicid = ft.id and fp.date = ft.date"& _
" and u2.id = fp.fromid and u1.id = ft.fromid "& _
" and ft.forum = 'Skateboard'"

?

Medlem sedan juli 2002549 inlägg
#5

Har testat både Engines och aasah's kod nu.. Får inget felmeddelande, men inga poster visas.

Så här ser aasah's SQL satsen ut när jag skriver ut den med response.write:

select u2.*, ft.*, fp.* From forum ft, forumreplies fp, users u2, users u1 where fp.topicid = ft.id and fp.date = ft.date and u2.id = fp.fromid and u1.id = ft.fromid and ft.forum = 'skateboard'

Denna kod brukar jag använda för att koppla två tabeller. Med denna får jag fram posterna iaf. Men jag vill ju få med senaste inlägget i trådarna också.

SQL = "select users.*, forum.* from users inner join forum on users.id = forum.fromid where forum = '"& request.querystring("forum") &"' ORDER BY date DESC"
Medlem sedan dec. 200012 464 inlägg
#6

Det här går inte att lösa utan att använda subselect vilket Mysql inte har stöd för i nuvarande produktionsversion. Du får använda flera frågor och temp-tabeller.

http://www.mysql.com/doc/en/example-Maximum-column-group-row.html

Medlem sedan juli 2002549 inlägg
#7

Okej. Jag ska kolla lite på den länken. Men det konstiga är att ampy som är medlem här använder mysql och har gjort samma sak som jag försöker göra.

Denna kod använder han (fungerar för han):

sql = 	"SELECT ft.id_trad, ft.subject, ft.user_id, ft.locked, ft.last, ft.svar, ft.smiley, fp.id, fp.user_id, fp.datum, m1.username, m2.username as lastPoster, ft.omrostning" & _
		" From forum_topics ft inner join forum_posts fp " & _
		" on ft.id_trad = fp.id_trad and fp.datum = ft.senasteinlagg" & _
		" inner join members m2 on m2.id = fp.user_id " & _     
		" inner join members m1 on m1.id = ft.user_id" & _
		" WHERE ft.rum = "&rum&" AND ft.senasteinlagg > '"&DateAdd("d", -showdays, Now)&"'" & _
		"order by "&order&" "&sort&""
141 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)