webForumDet fria alternativet

Fråga efter poster som inte finns...

Databaser & SQLur Databashanterare & SQL

12 svar · 350 visningar · startad av Eclipse

Medlem sedan juli 20003 825 inlägg
Frågan#1

Fasen... jag vet inte hur jag ska börja!

Jag har tidigare fuskat och har hafr frågan-i-frågan varianten. Man ställer en SQL fråga, loopar den och ställer en ytterligare fråga innuti den. Det är en fungerande men osnygg lösning.

Hur gör jag för att ställa frågan bara en gång?

Jag har kollat lite efter detta men jag vet inte riktigt vad jag ska leta efter...

Medlem sedan juli 20003 825 inlägg
#2

Vänta lite... svara inte på detta ännu, jag ska testa lite och återkommer... Jag har uttryckt mig lite dumt! Sorry!

Medlem sedan juli 20003 825 inlägg
#3

Nytt försök

Jag har tre tabeller. [competence], [competenceX] och [users].

[competence] - namn på olika kompetenser.
x_ID
x_name
x_sortfield - nummerordning
x_view - visa / visa inte

[competenceX] - vem av användarna som besitter vilken kompetens. (Skitdumt namn!! I brist på bättre vetande...)
x_ID
x_competenceID
x_userID

[users] - inte mycket att orda om.

***
Vad jag vill åstakomma.
Jag vill lista alla poster från [competence] en gång. Om användaren i fråga har just den kompetensen så blir det TRUE, annars FALSE.

Are you with!?

***
Detta går idag att åstakomma via en-fråga-i-frågan, jag skulle gärna villja åstakomma det med endast en fråga.

Medlem sedan juli 2002145 inlägg
#4

Så här nånting då:

select c.x_name, u.name, 'Ja' as Kompetens
from competence c, users u
where exists 
  (select * from competenceX where x_userId = u.id and x_competenceId = c.id)
union
select c.x_name, u.name, 'Nej'
from competence c, users u
where not exists 
  (select * from competenceX where x_userId = u.id and x_competenceId = c.id)
Medlem sedan juli 20003 825 inlägg
#5

Intressant upplägg. Jag ska kolla det!

Jag kan tillägga att jag kör Access och jag fattar inte din kod helt och hållet, men med lite trixande kanske man kan få det att fungera i alla fall...

Medlem sedan juli 2002145 inlägg
#6

Eclipse, jag är övertygad om att vi tillsammans skulle kunna få detta att fungera... ;)

Jag har förstås inte hela problembilden klar för mig! Jag vet inte om du i Access har möjlighet att testköra min SQL-sats direkt mot databasen och se vad du får för resultat - utan kringliggande kod?! Jag har ju bara lagt till en kolumn där det står Ja eller Nej beroende om kombinationen Användare - Kompetens existerar eller ej! SQL-frågan var bara tänkt som en hjälp för att komma vidare. Den behöver sannolikt kompletteras med nå'n "order by" och/eller nå'n "distinct" kanske och en del ASP-kod, eller nå't, för att nå dit du vill...

Kom igen med mer fakta så fixar vi det nog (du och jag eller nå'n annan på WF)!!

Medlem sedan juli 20003 825 inlägg
#7

"SQL-frågan var bara tänkt som en hjälp för att komma vidare."

Sorry för slow response...

Jag ska skärpa mig!

"... from competence c, users u ...."

Jag hade faktiskt glömt detta tillvägagångssättet. Tack för tipset! Det drar ner volymen kod rejält! :-)

Jag har tyvärr inte haft möjlighet att sätta mig in i denna biten sedan jag postade tråden. Still Stand-By so to say!

Medlem sedan juli 20003 825 inlägg
#8

Här är rätt fett med kod. Jag väljer att ta med allt så du kan få en överblick.

De markerade delarna är alltså det som jag försöker optimera bort. Lite mer överskådligare kod skulle inte skada! :-)

[b]SQL = "SELECT x_ID, x_firstname, x_lastname, x_company FROM [users] WHERE [x_view] = TRUE AND [x_customer] = TRUE;"[/b]
set mySQL = Conn.Execute(SQL)
on error resume next
[b]myGetRow = mySQL.GetRows()[/b]

IF IsArray(myGetRow) THEN
FOR j = 0 to UBound(myGetRow, 2)

	[b]TMP = "SELECT * FROM [fromStaffToCustomer] WHERE [x_jobID] = " & request("ID") & " AND [x_customerID] =" & myGetRow(0,j) & ";"[/b]
	set myTMP = Conn.Execute(TMP)
	on error resume next
	[b]IF myTMP.EOF THEN
		x_view = "<A HREF=""confirm.asp?order_true=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
		& "<IMG SRC=""/admin/pics/icons/false.gif"" WIDTH=""20"" HEIGHT=""16"" BORDER=""0"" TITLE=""Lägg till leverantör""></A>"
	ELSE
		x_view = "<A HREF=""confirm.asp?order_false=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
		& "<IMG SRC=""/admin/pics/icons/true.gif"" WIDTH=""20"" HEIGHT=""16"" BORDER=""0"" TITLE=""Ta bort leverantör""></A>"
		x_mail = x_mail & "<IMG SRC=""/admin/pics/icons/mail.gif"" WIDTH=""11"" HEIGHT=""16""> " & vbCRLF
	END IF[/b]

	' ## TABLE
	response.write "<TABLE WIDTH=""360"" BORDER=""0"" CELLSPACING=""0"" CELLPADDING=""0""><TR>" & vbCRLF

	[b]' ## X_VIEW
	IF request("ID") = "" THEN
		response.write "<TD WIDTH=""30"" CLASS=""button"" HEIGHT=""15""> </TD>" & vbCRLF
	ELSE
		response.write "<TD WIDTH=""30"" CLASS=""button"" HEIGHT=""15"">" & x_view & "</TD>" & vbCRLF
	END IF[/b]

	' ## NAME
	response.write "<TD WIDTH=""150"" CLASS=""button""><A HREF=""#"" onClick=""MM_openBrWindow('/production/mysettings/address.asp?ID=" & myGetRow(0, j) & "','Adress','width=400,height=500')"">" _
	& "<IMG SRC=""/admin/pics/icons/address.gif"" WIDTH=""15"" HEIGHT=""12"" BORDER=""0"" TITLE=""Visa adress""></A> " _
	& myGetRow(1, j) & " " & myGetRow(2, j) &"</TD>" & vbCRLF

	' ## COMPANY
	response.write "<TD WIDTH=""150"" CLASS=""button"">" & myGetRow(3, j) & "</TD>" & vbCRLF

	' ## ADDRESS
'	response.write "<TD WIDTH=""30""><A HREF=""#"" onClick=""MM_openBrWindow('/production/mysettings/address.asp?ID=" & myGetRow(0, j) & "','Adress','width=400,height=500')"" TITLE=""Visa adress"">"
'	response.write "<IMG SRC=""/admin/pics/icons/address.gif"" WIDTH=""15"" HEIGHT=""12"" BORDER=""0"" TITLE=""Visa adress för leverantör""></A></TD>" & vbCRLF
	response.write "<TD WIDTH=""30""> </TD>" & vbCRLF

	' ## END OF TABLE
	response.write "</TR></TABLE>" & vbCRLF

NEXT
END IF
Medlem sedan dec. 200012 464 inlägg
#9

Har du testat frågan med union? Jag ser ingen anledning att den inte skulle fungera i Access.

Medlem sedan juli 20003 825 inlägg
#10

Vad tror du om detta?

SQL = "SELECT u.x_ID, u.x_firstname, u.x_lastname, u.x_company FROM users u " _
& " WHERE u.x_view = TRUE AND u.x_customer = TRUE "
& " UNION (SELECT f.x_ID, f.x_name FROM fromStaffToCustomer f WHERE f.x_ID = " & request("ID") _
& " AND f.x_customerID = u.x_ID);"
Medlem sedan juli 2002145 inlägg
#11

Öööh! :q Jag ser inte sambandet mellan SQL--frågan i ditt senaste inlägg och det problem du från början presenterade... så härmed släpper jag mitt engagemang i denna tråd!!

Medlem sedan juli 20003 825 inlägg
#12

Jag mjukstartar.

Det är samma projekt, samma typ av problem fast på en annan sida med färre poster inblandade.

I min ursprungliga fråga är det tre tabeller inblandade, i denna är det två tabeller, men fortfarande samma problem.

[b]TMP = "SELECT * FROM [fromStaffToCustomer] WHERE [x_jobID] = " & request("ID") & " AND [x_customerID] =" & myGetRow(0,j) & ";"[/b]
	set myTMP = Conn.Execute(TMP)
	on error resume next
	[b]IF myTMP.EOF THEN
		x_view = "<A HREF=""confirm.asp?order_true=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
		& "<IMG SRC=""/admin/pics/icons/false.gif"" WIDTH=""20"" HEIGHT=""16"" BORDER=""0"" TITLE=""Lägg till leverantör""></A>"
	ELSE
		x_view = "<A HREF=""confirm.asp?order_false=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
		& "<IMG SRC=""/admin/pics/icons/true.gif"" WIDTH=""20"" HEIGHT=""16"" BORDER=""0"" TITLE=""Ta bort leverantör""></A>"
		x_mail = x_mail & "<IMG SRC=""/admin/pics/icons/mail.gif"" WIDTH=""11"" HEIGHT=""16""> " & vbCRLF
	END IF[/b]

...
[b]	' ## X_VIEW
	IF request("ID") = "" THEN
		response.write "<TD WIDTH=""30"" CLASS=""button"" HEIGHT=""15""> </TD>" & vbCRLF
	ELSE
		response.write "<TD WIDTH=""30"" CLASS=""button"" HEIGHT=""15"">" & x_view & "</TD>" & vbCRLF
	END IF[/b]

Här har jag ställt en fråga-i-fråga. Koden här illusterar hur jag frågar efter en post och beroende på det skriver kod till sidan. Jag gör en fråga-i-frågan och Frågar efter poster som inte finns... vilket är namnet på tråden.

Beklagar mina dåliga talager att i skrift uttrycka ett problem!

Medlem sedan juli 2002145 inlägg
#13

Skam den som ger sig!! :P

Här kommer ett nytt förslag utifrån ditt "fett med kod"-inlägg.

Betänk att jag inte kan asp nå't vidare... :p . De delarna har jag bara kopierat från din kod!!

SQL = "SELECT u.x_ID, u.x_firstname, u.x_lastname, u.x_company, 1 
FROM users u
WHERE u.x_view = TRUE 
AND u.x_customer = TRUE
AND EXISTS (
  SELECT * 
  from fromStaffToCustomer
  where x_jobID = " & request("ID") & "
  and x_customerID = u.x_ID)
UNION
SQL = "SELECT u.x_ID, u.x_firstname, u.x_lastname, u.x_company, 0 
FROM users u
WHERE u.x_view = TRUE 
AND u.x_customer = TRUE
AND NOT EXISTS (
  SELECT * 
  from fromStaffToCustomer
  where x_jobID = " & request("ID") & "
  and x_customerID = u.x_ID)"

set mySQL = Conn.Execute(SQL)
on error resume next
myGetRow = mySQL.GetRows()

IF IsArray(myGetRow) THEN
FOR j = 0 to UBound(myGetRow, 2)

  IF myGetRow(4, j) = 0 THEN
    x_view = "<A HREF=""confirm.asp?order_true=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
    & "<IMG SRC=""/admin/pics/icons/false.gif"" WIDTH=""20""   HEIGHT=""16"" BORDER=""0"" TITLE=""Lägg till leverantör""></A>"
  ELSE
    x_view = "<A HREF=""confirm.asp?order_false=" & myGetRow(0, j) & "&ID=" & request("ID") & """>" _
    & "<IMG SRC=""/admin/pics/icons/true.gif"" WIDTH=""20"" HEIGHT=""16"" BORDER=""0"" TITLE=""Ta bort leverantör""></A>"
		x_mail = x_mail & "<IMG SRC=""/admin/pics/icons/mail.gif"" WIDTH=""11"" HEIGHT=""16""> " & vbCRLF
  END IF

    .
    .
   etc

NEXT
END IF
135 ms totalt · 3 externa anrop · v20260731065814-full.9823c0c5
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)