webForumDet fria alternativet

joina 3 tabeller

Databaser & SQLur Databashanterare & SQL

14 svar · 669 visningar · startad av WebbisNet

WebbisNetMedlem sedan feb. 20032 027 inlägg
#1

hur får jag denna sats att inkludera en tredje tabell som heter wfsubkategori, ska ha med kategoriID i tabellen sukategori i denna sats

Set RS=objConn.Execute("SELECT * FROM wfInlagg INNER JOIN wfKategori ON wfInlagg.inlaggKategori = wfKategori.kategoriID where inlaggKategori="& varKat)
Peter SMedlem sedan dec. 20025 483 inlägg
#2
SELECT
	*
FROM
	wfInlagg INNER JOIN wfKategori
	ON
	wfInlagg.inlaggKategori = wfKategori.kategoriID
		INNER JOIN wfsubkategori
		ON
		wfsubkategori.kategoriid = wfKategoriID
		
where
	inlaggKategori=" & varKat
WebbisNetMedlem sedan feb. 20032 027 inlägg
#3

Peter S skrev:

SELECT
	*
FROM
	wfInlagg INNER JOIN wfKategori
	ON
	wfInlagg.inlaggKategori = wfKategori.kategoriID
		INNER JOIN wfsubkategori
		ON
		wfsubkategori.kategoriid = wfKategoriID
		
where
	inlaggKategori=" & varKat

Expected ')'

/Forum/listaInlagg.asp, line 11

"wfInlagg.inlaggKategori = wfKategori.kategoriID INNER JOIN wfsubkategori ON &"_

Set RS=objConn.Execute("SELECT * FROM wfInlagg INNER JOIN wfKategori ON &"_
	"wfInlagg.inlaggKategori = wfKategori.kategoriID INNER JOIN wfsubkategori ON &"_
	"wfsubkategori.kategoriid = wfKategoriID where &"_
	"inlaggKategori=" & varSub)
Peter SMedlem sedan dec. 20025 483 inlägg
#4

På tre ställen har du &-tecknet på fel sida av "-tecknet.

WebbisNetMedlem sedan feb. 20032 027 inlägg
#5

wfInlagg = kategori
wfKategori= kategoriID
wfSubkategori=kategoriID finns även subkategoriID här

[MySQL][ODBC 3.51 Driver][mysqld-4.0.25-max]Unknown column 'wfKategoriID' in 'on clause'

/Forum/listaInlagg.asp, line 10

[MySQL][ODBC 3.51 Driver][mysqld-4.0.25-max]Unknown column 'wfKategoriID' in 'on clause'

/Forum/listaInlagg.asp, line 10

Set RS=objConn.Execute("SELECT * FROM wfInlagg wfi INNER JOIN wfKategori wfk ON "&_
	"wfi.kategori = wfk.kategoriID INNER JOIN wfsubkategori ON "&_
	"wfsubkategori.kategoriid = wfKategoriID where "&_
	"wfk.kategori=" & varSub)
Peter SMedlem sedan dec. 20025 483 inlägg
#6

Felet beror som meddelandet antyder på att wfKategoriID inte finns i någon tabell. Vilken kolumn skall wfsubkategori.kategoriid matchas mot?

Set RS=objConn.Execute("SELECT * FROM wfInlagg wfi INNER JOIN wfKategori wfk ON "&_
	"wfi.kategori = wfk.kategoriID INNER JOIN wfsubkategori ON "&_
	"wfsubkategori.kategoriid = wfk.kategoriID where "&_
	"wfk.kategori=" & varSub)
WebbisNetMedlem sedan feb. 20032 027 inlägg
#7

Skriver om koden och nu har jag först detta problemet

Detta är huvudkategorierna wfCat
+----+-------------------+
| id | kategori          |
+----+-------------------+
|  1 | Bilar& Motorer    |
|  2 | Sex & Samlevnad   |
|  3 | Datorer & N􏻤tverk|
+----+-------------------+

Detta är underkategorierna wfSubCat
+----+---------+--------+---------------+
| id | mainCat | subCat | underkategori |
+----+---------+--------+---------------+
|  1 |       1 |      1 | Saab          |
|  2 |       1 |      2 | Volvo         |
|  3 |       1 |      3 | BMW           |
|  4 |       2 |      1 | St􏻤llningar  |
|  5 |       2 |      2 | Sexleksaker   |
|  6 |       2 |      3 | Porrsidor     |
|  7 |       3 |      1 | PC            |
|  8 |       3 |      2 | Mac           |
|  9 |       3 |      3 | Barebone      |
+----+---------+--------+---------------+

Hur får jag underkategorierna att listas efter rätt huvudkategori när jag klickar på respektive länk

Denna SQL är helt fel
c är variabeln för huvudkategorin, 1 2 eller 3
<%varC = Request.Querystring("c")
Set rs=objConn.Execute("SELECT * FROM wfSubCat INNER JOIN wfCat ON SubCat = SubCat where SubCat="& varC)
doggelitoMedlem sedan juni 20003 076 inlägg
#8

För att hämta alla underkategorier så behöver du inte joina i detta fall.
Däremot om du vill hämta alla huvudkategorier + vald huvudkategoris underkategorier så behöver du det.
Men då blir det lite mer avancerad sqlsats.

<%
     Dim varC, rs, objConn
     varC = Request.Querystring("c")

     Set rs = objConn.Execute("SELECT * FROM wfSubCat WHERE mainCat = " & varC)
%>

Eller föresten, om du t.ex. vill ha med huvudkategorins namn så kan du joina:

<%
     Dim varC, rs, objConn
     varC = Request.Querystring("c")

     Set rs = objConn.Execute("SELECT * FROM wfSubCat s INNER JOIN wfCat c ON s.mainCat = c.id WHERE c.id = " & varC)
%>

Dock när du joinar så bör du speca dina kolumner i selecten, annars får du dubletter av samma värden (ex. mainCat i wfSubCat och id i wfCat)

WebbisNetMedlem sedan feb. 20032 027 inlägg
#9

doggelito skrev:

För att hämta alla underkategorier så behöver du inte joina i detta fall.
Däremot om du vill hämta alla huvudkategorier + vald huvudkategoris underkategorier så behöver du det.
Men då blir det lite mer avancerad sqlsats.

<%
     Dim varC, rs, objConn
     varC = Request.Querystring("c")

     Set rs = objConn.Execute("SELECT * FROM wfSubCat WHERE mainCat = " & varC)
%>

Eller föresten, om du t.ex. vill ha med huvudkategorins namn så kan du joina:

<%
     Dim varC, rs, objConn
     varC = Request.Querystring("c")

     Set rs = objConn.Execute("SELECT * FROM wfSubCat s INNER JOIN wfCat c ON s.mainCat = c.id WHERE c.id = " & varC)
%>

Dock när du joinar så bör du speca dina kolumner i selecten, annars får du dubletter av samma värden (ex. mainCat i wfSubCat och id i wfCat)

är det nåt fel på den här satsen eftersom underföljande kolumner finns med i dessa tabeller

set userRS=objConn.Execute("select userID, username, picture, uid from tblUsers INNER JOIN wfThreads on userID=uid")

Response.Write " <strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"

doggelitoMedlem sedan juni 20003 076 inlägg
#10

WebbisNet skrev:

är det nåt fel på den här satsen eftersom underföljande kolumner finns med i dessa tabeller

Jepp, det är det. :)
Du har inte inlaggDatum med i selecten.
Sen är det bra att använda alias på tabellerna utifall samma kolumn finns i båda.

set userRS=objConn.Execute("SELECT u.userID, u.username, u.picture, t.inlaggDatum FROM tblUsers u INNER JOIN wfThreads t ON u.userID = t.uid")
WebbisNetMedlem sedan feb. 20032 027 inlägg
#11

doggelito skrev:

WebbisNet skrev:

är det nåt fel på den här satsen eftersom underföljande kolumner finns med i dessa tabeller

Jepp, det är det. :)
Du har inte inlaggDatum med i selecten.
Sen är det bra att använda alias på tabellerna utifall samma kolumn finns i båda.

set userRS=objConn.Execute("SELECT u.userID, u.username, u.picture, t.inlaggDatum FROM tblUsers u INNER JOIN wfThreads t ON u.userID = t.uid")

får bara
error '80020009'

/Forum/read.asp, line 66

även att den finns med i selecten

set userRS=objConn.Execute("select userID, username, picture, inlaggDatum, uid from tblUsers INNER JOIN wfThreads on userID=uid")

rad66 är
Response.Write " <strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"

doggelitoMedlem sedan juni 20003 076 inlägg
#12

Du har förmodligen råkat ut för EOF.

set userRS=objConn.Execute("select userID, username, picture, inlaggDatum, uid from tblUsers INNER JOIN wfThreads on userID=uid")

If Not userRS.Eof Then
     Response.Write "&nbsp;<strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"
End If

Set userRS = Nothing
WebbisNetMedlem sedan feb. 20032 027 inlägg
#13

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/Forum/read.asp, line 48

rad 48 är fetmarkerad

set userRS=objConn.Execute("select userID, username, picture, inlaggDatum, uid from tblUsers INNER JOIN wfThreads on userID=uid")
[B]If Not userRS.Eof Then
     Response.Write "&nbsp;<strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"[/B]
End If
Do until userRS.eof
Response.Write "<a href="""& userRS("inlaggRubrik") &""">"& userRS("inlaggRubrik") &"</a>"
userRS.movenext: Loop
Set userRS = Nothing
Peter SMedlem sedan dec. 20025 483 inlägg
#14

Ett par rader nedanför den fetmarkerade säger du userRS("inlaggRubrik"). Men i SQL-frågan hämtar du inte "inlaggRubrik".

doggelitoMedlem sedan juni 20003 076 inlägg
#15

WebbisNet skrev:

set userRS=objConn.Execute("select userID, username, picture, inlaggDatum, uid from tblUsers INNER JOIN wfThreads on userID=uid")
If Not userRS.Eof Then
     Response.Write "&nbsp;<strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"
End If
Do until userRS.eof
Response.Write "<a href="""& userRS("inlaggRubrik") &""">"& userRS("inlaggRubrik") &"</a>"
userRS.movenext: Loop
Set userRS = Nothing

Här har du lite farlig kod igen. :)
Överallt där du skriver ut userRS(...) måste/bör du lägga innanför if-taggar för att kolla om userRS innehåller nånting.

set userRS=objConn.Execute("select userID, username, picture, inlaggDatum, uid, inlaggRubrik from tblUsers INNER JOIN wfThreads on userID=uid")
If Not userRS.Eof Then
     Response.Write "&nbsp;<strong class=""definition"">Insänt av "& userRS("username") &" "& userRS("inlaggDatum") &"</strong>"

     Do until userRS.eof
          Response.Write "<a href="""& userRS("inlaggRubrik") &""">"& userRS("inlaggRubrik") &"</a>"
          userRS.movenext
     Loop
End If
Set userRS = Nothing
133 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)