webForumDet fria alternativet

Fråga efter nåt som inte finns...??

Databaser & SQL

15 svar · 377 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1
IF request("ID") <> "" THEN
SQL = "SELECT job.x_ID, job.x_name, job.x_type, job.x_date, " _
& " member.x_ID, member.x_firstname, member.x_lastname, member.x_company, "_
& " staff.x_ID, staff.x_firstname, staff.x_lastname, staff.x_company "_
& " FROM users member, users staff, job WHERE " _
& " job.x_userID = member.x_ID AND " _
& " job.x_staffID = staff.x_ID AND " _
& " job.x_ID = " & request("ID") & ";"

SQL = "SELECT job.x_ID, job.x_name, job.x_type, job.x_date, " _
& " member.x_ID, member.x_firstname, member.x_lastname, member.x_company "_
& " FROM users member, job WHERE " _
& " job.x_userID = member.x_ID AND " _
& " job.x_ID = " & request("ID") & ";"

'response.write sql & "<BR><BR>"
on error resume next
set mySQL = Conn.Execute(SQL)
IF NOT mySQL.EOF THEN listPosts = mySQL.GetRows()

END IF

Den första varianten fungerar inte där av den andra... men kan man få med data på nåt sätt i alla fall!?

Är frågan otydlig?

Medlem sedan dec. 200012 464 inlägg
#2

outer join

IF request("ID") <> "" THEN
SQL = "SELECT job.x_ID, job.x_name, job.x_type, job.x_date, " _
& " member.x_ID, member.x_firstname, member.x_lastname, member.x_company, "_
& " staff.x_ID, staff.x_firstname, staff.x_lastname, staff.x_company "_
& " FROM users member inner join job on job.x_userID = member.x_ID ) left outer join users staff on " _
& " job.x_staffID = staff.x_ID where " _
& " job.x_ID = " & request("ID")

------------------
essentitia preter non sans multiplicandum

Medlem sedan juli 20003 825 inlägg
#3

Tack för det! Jag testade men fick det inte att fungera. Jag hittade en intressant tråd här men lyckades endå inte få ordning på det hela.

Finns det något uppenbart fel med denna kod? (response.write)

SELECT x_ID, x_firstname FROM ([users] LEFT OUTER JOIN [jobX] ON jobX.x_staffID = users.x_ID );

[jobX]
x_jobID
x_staffID

Medlem sedan dec. 200012 464 inlägg
#4

Finns det något uppenbart fel med denna kod?

Nej,kan du berätta något mer om dina känslor inför denna select. Är det något som du inte är tillfreds med eller något som du önskar att du gjort annorlunda?

------------------
essentitia preter non sans multiplicandum

Medlem sedan juli 20003 825 inlägg
#5

Känslor!? He, he... Nej, jag ska inte vara mer poetiskt än nödvändigt!

Det skulle i så fall vara att man måste ha en öppen attityd, men det finns redan Open Source så där har andra hunnit före.

---
Nej, så här ska det vara. Det finns en drös med [job] och en stor mängd [users] men med olika attribut.

users member, users customer, users staff

Are yuou with? En användare kan endast vara EN av dessa alternativ. Det kollas tidigare i ett annat sammanhang. Givetvis kopplas en användare till ett job med job.x_userID men nu vill uppdragsgivaren även att en administratör, staff, ska kunna kopplas till ett jobb så att när jobben listas ser dom bara sina egna och möjligen de jobb som inte har någon administratör kopplad till sig.

Jag visste inte om jag då skulle skapa en job.x_staffID eller, som ovan, en speciell tabell avsedd för detta. [jobX], x_jobID, x_staffID.

Fördelen med den extratabellen är att man kan definiera vilka [users staff] som ska listas för [users members].

Säg att det finns 10 [users staff] men bara tre av dessa ska kunna väljas... Ja, du fattar.

I mitt andra inlägg ovan ville jag att slutresultatet skulle bli så här:

users.x_ID - users.x_firstname - jobX.x_staffID
23 - jakob - <NULL>
24 - kalle - <NULL>
25 - anna - TRUE
26 - erik - <NULL>
27 - örjan - <NULL>
29 - eva - <NULL>

Eller tänker jag fel?

Medlem sedan juli 20003 825 inlägg
#6

Till alla som kommer efter mig och tycker att OUTER JOIN suger FETT efter att ha läst och testat ovanstående inlägg kan jag ge följande tips till:

SQL = "SELECT users.x_ID, users.x_firstname, jobX.x_ID FROM ([users] " _
& " LEFT OUTER JOIN [jobX] ON jobX.x_staffID = users.x_ID );"

Medlem sedan juli 20003 825 inlägg
#7

IsNull

SQL = "SELECT users.x_ID, users.x_firstname, jobX.x_ID FROM ([users] " _
& " LEFT OUTER JOIN [jobX] ON jobX.x_staffID = users.x_ID );"

response.write sql & "<BR><BR>"
'on error resume next
set mySQL = Conn.Execute(SQL)
IF NOT mySQL.EOF THEN listData = mySQL.GetRows()

' ## LOOP ALL POSTS
IF IsArray(listData) THEN
myRow = listData
response.write myFont1
FOR j = 0 to UBound(myRow,2)
	FOR i = 0 to UBound(myRow,1)
		response.write i & "," & j & "> " & myRow(i,j) & " " & vbCRLF
	NEXT
	response.write IsNull(myRow(2,j))
	IF NOT j = UBound(myRow, 2) THEN response.write "<BR><BR>"
NEXT
response.write "</FONT>"
END IF

Ovanstående kod ger detta resultatet:

0,0> 3 1,0> Jakob 2,0> True

0,1> 6 1,1> Lis-Anna 2,1> True

0,2> 11 1,2> Clark 2,2> True

0,3> 12 1,3> Kent 2,3> True

0,4> 13 1,4> Karl 2,4> True

0,5> 14 1,5> Yngwe 2,5> True

0,6> 15 1,6> Palle 2,6> True

Men det borde inte vara True, eftersom posten inte finns... Attans aber!

Medlem sedan juni 200032 967 inlägg
#8

Men det borde inte vara True, eftersom posten inte finns... Attans aber!

Hm. Borde det inte det? Din IsNull() returnerar ju att värdet i fältet är null, dvs ingen post i den 'högra' tabellen matchar joinvillkoret.

response.write IsNull(myRow(2,j))

Eller har jag tänkt alldeles snett?

Mvh,

Medlem sedan juli 20003 825 inlägg
#9

OK, jag hajjar.

Hur skriver jag för att det ska bli FALSE då?

Medlem sedan juni 200032 967 inlägg
#10

Du kan ju alltid göra något sånt här:

if IsNull(myRow(2,j)) then
response.write "False"
else
response.write "True"
End if

Mvh,

Medlem sedan juli 20003 825 inlägg
#11

Jo men då blir det ju en IF sats ju...!!

Det går ju inte! :-)

"<IMG SRC=""" & myRow(4,j) & ".gif"">"

<IMG SRC="true.gif">
vs.
<IMG SRC="false.gif">

Jag kan ju inte använda min supertajta ny-optimerade super-kåd om jag tvingas till en IF sats... Det känns som Plan B i sammanhanget... men okej, bättre än inget. Höhöhö....

Medlem sedan juli 20003 825 inlägg
#12

Vilken film kommer din footer från denna gången?

Medlem sedan juni 200032 967 inlägg
#13

Då provar vi detta:

"<IMG SRC=""" & Cbool(len("" & myRow(4,j))) & ".gif"">"

Angående min signatur: http://us.imdb.com/Title?0118749

Mvh,

Medlem sedan juli 20003 825 inlägg
#14

Boogie Nights har jag inte sett och jag förstår att jag måste ta mitt ansvar här. :-)

-------
Koden funkar inte. Alla blir True.gif.

	response.write CBool(len(IsNull(myRow(2,j)))) & ".gif "
	response.write CBool(IsNull(myRow(3,j))) & ".gif "
	response.write CBool(IsNull(myRow(4,j))) & ".gif "
Medlem sedan juni 200032 967 inlägg
#15

Provade du den koden jag gav dig? Alltså den utan isNull()?

Den kod du visar borde alltihop ge True.gif, eftersom både "True" och "False" är längre än 0 tecken.

Mvh,

Medlem sedan juli 20003 825 inlägg
#16

OK, grejt. Det verkar fungera... Jag kan inte testa true men omständigheterna verkar vara positiva... Typ!

Eller nåt.

279 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
144 ms — hämta tråd, inlägg och bilagor (db)
131 ms — ändringar (db)