Avatar billede dotdonk Nybegynder
27. november 2006 - 22:06 Der er 6 kommentarer

Udvidelse af bruger-relations-søgning

Hej med jer...

Jeg har tidligere oprettet spørgsmål vedr. at tælle antal bruger relationer.

Eks.: http://www.eksperten.dk/spm/741864

-----------------------------------

select count(*)
From dbo.BrugerRelation t1
left join BrugerRelation t2 on t1.BrugerID2 = t2.BrugerID1
where t1.BrugerID1 = 1
and t2.BrugerID2 <> t1.BrugerID1

-----------------------------------

Kunne man udvide denne query til 2 søge-funktioner:

1. søgefunktion som kun viser brugere, som man IKKE er i netværk  med. Altså som ikke viser brugerrelationer i niveau 0, 1 og 2, men alle andre.

2. søgefunktion som kun viser brugere man er i netværk med. Altså som viser brugerrelationer i niveau 0, 1 og 2.

Håber at høre fra nogen.

Mange hilsner

DD
Avatar billede dsj Nybegynder
28. november 2006 - 23:23 #1
Hvis jeg har forstået spørgsmålet korrekt, så bør følgende virke:

1.
select count(*)
From dbo.BrugerRelation t1
left join BrugerRelation t2 on t1.BrugerID2 = t2.BrugerID1
where t1.BrugerID1 NOT IN (0,1,2)
and t2.BrugerID2 <> t1.BrugerID1

2.
select count(*)
From dbo.BrugerRelation t1
left join BrugerRelation t2 on t1.BrugerID2 = t2.BrugerID1
where t1.BrugerID1 IN (0,1,2)
and t2.BrugerID2 <> t1.BrugerID1

Som du ser, er den eneste forskel, hvorvidt der står NOT foran IN (0,1,2).
Avatar billede dotdonk Nybegynder
29. november 2006 - 13:19 #2
Hej dsj

Tak for dit svar.. De to TSQL funktioner er ikke bekendt med.

Jeg kan se at (0,1,2) er de bruger niveauer jeg har angivet og at du har placeret NOT IN (0,1,2) bag ved where t1.BrugerID1

(0,1,2) er ikke bruger id'er.
Avatar billede dsj Nybegynder
29. november 2006 - 17:12 #3
Ok, det er selvfølgelig rigtigt - tænkte jeg ikke lige over. Så skal du erstatte t1.BrugerID1 med niveau-kolonnen de to steder hvor jeg bruger IN(...).

Du kan evt. oplyse lidt mere om BrugerRelation's tabellen.
Avatar billede dotdonk Nybegynder
30. november 2006 - 06:53 #4
God morgen

Der er ingen niveau kollonne.

Men hvis du kigger i et af mine tidligere indlæg, så kan du se data strukturen her:

http://www.eksperten.dk/spm/739704
Avatar billede dsj Nybegynder
30. november 2006 - 17:15 #5
Okay, nu er jeg med. Du er ude i en ikke så smart data-struktur, som du bør overveje at ændre. Det du vil kan kun lade sig gøre ved at tabellen BrugerRelation mod sig selv, lige så mange gange, som du ønsker niveauer. At joine en tabel mod sig selv flere mange gange er en ineffektiv måde at slå data op på, da det ikke skalerer.

Den skalerer ikke fordi du ikke kan lave ét SQL-statement, som finder det brugere i det ønskede antal niveauer. I stedet er du nødt til at lave et SQL-statement pr. niveau-søgning - i dette spørgsmål har du selvfølgelig kun to, men du bør stadig se efter en anden måde at strukturere data på, som kan gøre søgningen lettere og mere dynamisk. Oveni hatten har flere databaser en grænse for, hvor mange joins man kan have i ét SQL-statement, så hvis du engang vil nogle flere niveauer ned i hierarkiet, kan du få problemer.
Avatar billede dotdonk Nybegynder
01. december 2006 - 10:34 #6
morgen

jeg har tænkt på det dsj... jeg kan bare ikke lige få øje på en mere optimal data struktur, end den måde jeg parer brugere id'ere på nu.

Er det i det hele taget muligt?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester