webForumDet fria alternativet

Snabba upp kod

ASP

18 svar · 598 visningar · startad av martinpartin

Medlem sedan jan. 2001373 inlägg
Frågan#1

Hej...

Har någon nått tips hur jag kan snabba upp detta /slippa loop i loop .. ?
går det att joina en o sama tabell ?


Dim SQL_01
    SQL_01 = "SELECT displayName, distinguishedName FROM Users ORDER BY DisplayName"
Dim oRS_01
Set oRS_01 = dbconn.Execute(SQL_01)
                  
    If oRS_01.EOF Or oRS_01.BOF Then
    Else
    
    
Dim oRS_02
    
    
    
    Do Until oRS_01.EOF
    
    
    
    Response.Write(""& oRS_01("displayName") &"-------")
    
    Set oRS_02 = dbconn.Execute("SELECT displayname FROM Users WHERE Manager = '"&oRS_01("distinguishedName")&"'")
    
    If oRS_02.EOF Or oRS_02.BOF Then
    Response.Write("<br>")
    Else
    Response.Write("Manager for<br>")
    
    End if
    
    
    oRS_01.MoveNext
    Loop
    
   
    
    End if
    
    
    oRS_02.Close
    oRS_01.Close
    Set oRS_02 = Nothing
    Set oRS_01 = Nothing
Medlem sedan okt. 20041 556 inlägg
#2

Fattar inte riktigt vad du vill göra, men testa något sådant hära kanske:

sql= "SELECT a.displayName FROM Users a " &_
"LEFT JOIN users b ON b.Manager=a.distinguishedName " &_
"ORDER BY b.Manager,a.DisplayName"

Set rs = Connection.execute(sql)

Dim displayname
Do While not rs.eof
	if rs("displayName")<>displayname then
		displayname = rs("displayName")
		Response.Write "<b>Manager for: " & displayname & "</b><br>"
	Else
		Response.Write rs("displayName") & "<br>"
	End if
	rs.movenext
Loop
Medlem sedan jan. 2001373 inlägg
#3

OK....

har en tabell (Users)
distinguishedName, manager, displayname

om någon är chef över någon så kommer chefens distinguishedName finnas i manager fältet.

det ovan returnerade fel data.

Kan ju vara en ren sql fråga. Byt gärna forum.

Medlem sedan jan. 2001373 inlägg
#4

För att göra det enkelt... exakt samma resultat som koden jag postade returnerar.
Bara att jag inte kan få rätt på sk*ten

Medlem sedan jan. 2001373 inlägg
#5

Nu har jag kommit en bit på väg:

detta returnerar alla som är manager.
Men jag skulle även vilja visa dem som inte är...
om ni förstår jvad jag menar

Med detta får jag ut de på poster som jag vill markera för att de har users som har distinguishedname som manager.
Det är ju bra. Men så vill jag få fram resten också.

SELECT displayName, Manager, distinguishedname FROM Users
WHERE distinguishedName IN (SELECT manager FROM USers)
ORDER BY DisplayName
Medlem sedan okt. 20041 556 inlägg
#6

Skall du ha med alla poster så skall du nog köra med left join. I och för sig så tycker nog jag att det är fel databasstruktur.
Du borde skapa en tablell med magagers och ett relationsid i tabellen users.

Medlem sedan jan. 2001373 inlägg
#7

yes jag vet om det... problemet är att det är en kopia på ett active directory(LDAP)
så helst vill jag fixa det utan att ändra databas-struktur.

Medlem sedan okt. 20041 556 inlägg
#8

Men kan du inte använda guid:et i stället då? Vilken databas handlar det om?

Medlem sedan jan. 2001373 inlägg
#9

hej... Nej har byggt upp en ad-cache (sql db)... Vi har så många applikationer som kan ställa "dumma" frågor mot ad:t Kanske e det hel fel. Men nu blev det så iaf.

guid sparas som en hex sträng i sql.. relationen med manager görs genom distinguishedname / manager..

Men rätta mig gärna om e helt fel på det.

Medlem sedan jan. 2001373 inlägg
#10
SELECT a.displayName, a.manager FROM Users a 
LEFT JOIN users b ON b.Manager=a.distinguishedName 
ORDER BY a.DisplayName

Denna träffar ju rätt som det ser ut... Det man skell vilja göra är att lägga till en "GROUP BY" och en "variabel" som typ "ismanager ='yes'" som man sedan kan använda med recordsettet

Medlem sedan jan. 2001373 inlägg
#11

Denna får ut precis de records jag vill ha men skulle vilja kunna identifiera dessa på nått sätt.

SELECT a.displayName, a.manager FROM Users a 
INNER JOIN users b ON b.Manager=a.distinguishedName 
ORDER BY a.DisplayName
Medlem sedan apr. 20031 660 inlägg
#12

HEJ!

Tipsar om AS, har använt det för att märka upp fält för att kunna skilja dem åt, som du också verkar vilja göra? Har inget exempel, eftersom det var länge sedan.

För att underlätta för oss, posta gärna det resultat du får med din fråga, och hur du vill att det ska se ut.

Tror frågan passar bättre i sql-forumet också.

Medlem sedan juni 200032 967 inlägg
#13

Vad är det du vill "identifiera"?
Du hämtar ju bara fälten från tabell a, och det är väl inga problem att skilja displayname från manager? Eller?

Medlem sedan jan. 2001373 inlägg
#14

japp AS skall jag kolla på . tror du förstår vad jag menar.

Jag wskall försöka förklara lite bättre. Vet inte heller om "identifiera " rätt uttryck.

en tabell som heter 'Users'

3 st kolumner som heter displayName, Manager, distinguishedName

Om någon har en manager så läggs managerns distinguishedname in i manager kolumnen för den posten.
Om jag vill lista ut alla och markera att de är manager. Ex. Martin - Manager for
Om de inte har några poster "under sig" så skall det bara stå Martin - Menig

Medlem sedan apr. 20031 660 inlägg
#15

HEJ!

Jag kan inte göra det själv, men har sett sql:er med Case-satser som direkt sätter tex 0/1 beroende på vad något är, tex det du frågar om.

Annars kan du ju lösa det sedan, om posten har ett värde i distinguishedname, skriv ut rätt text, annars skriver du ut en annan text.
Men, jag är rätt säker på att det kan fixas direkt i recordsetet.

Medlem sedan jan. 2001373 inlägg
#16

Alltså...
Jag kan ju alltid göra en array med detta recordset och sedan kolla av mot det i ett till. Men det känns onödigt..

Medlem sedan jan. 2001373 inlägg
#17

Något i stil med denna om n kan förstå vad jag menar..
Nu funkar ju inte denna utan jag bara försöker visa...


DECLARE @ManagerFor varchar
SELECT A.displayname, A.manager, A.distinguishedname, A.Manager, (@Managerfor = 'YES') FROM Users AS A
INNER JOIN Users AS B ON B.Manager =  A.distinguishedname
ORDER BY A.displayName DESC

GROUP BY 

SELECT A.displayname, A.manager, A.distinguishedname, A.Manager
ORDER BY A.displayName DESC
Medlem sedan juni 200032 967 inlägg
#18

Jag fattar inte vad frågan / problemet är, eftersom du säger att du får ut rätt saker med SQL-frågan ovan. Men, generellt, sätt alias på fälten med as, så kan du i koden ta reda på vilket fält som härstammar från vilken instans av tabellen users.

SELECT a.displayName, a.manager, [b]b.displayname as något_annat[/b] FROM Users a 
INNER JOIN users b ON b.Manager=a.distinguishedName 
ORDER BY a.DisplayName

edit: detta inlägg skrevs innan martins senaste ramlade in. Nu blev jag ännu mer förbryllad över vad som efterfrågas. ;)

Medlem sedan jan. 2001373 inlägg
#19

Jag måste nog öva på kommunikationen eller läsa en sql-bok. :)
Men ok. Jag provar en sista gång.

"SKAPA EN temporär kolumn"(fiktiv)

SELECT A.displayname, A.manager, A.distinguishedname, A.Manager, >A.temoprär kollumn<
FROM Users AS A
INNER JOIN Users AS B ON B.Manager =  A.distinguishedname
ORDER BY A.displayName DESC

'Temporär kollumn = "yes"

GROUP BY ' FÖR ATT SLÅ IHOP Alla poster och kunna skilja ut mangers från meniga

SELECT A.displayname, A.manager, A.distinguishedname, A.Manager
ORDER BY A.displayName DESC

'Temporär kollumn = "no"

rörigt ? :) nja lite

321 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
140 ms — deklarationer (db)
0 ms — hämta statistik (cache)
169 ms — hämta tråd, inlägg och bilagor (db)
149 ms — ändringar (db)