[ASP/SQL] Probleem met weergave Recordset *

Pagina: 1
Acties:

  • Kamikazi
  • Registratie: Juli 2001
  • Niet online
Mijn probleem is als volgt:

Ik ben bezig met een zoekfunctie binnen naar kennis bij gebruikers. Dit gebeurd aan de hand van vaste zoekopties (bijv. Windows 95 = ID1, Windows 98 = ID2, Windows 2000 = ID3).

Het is mogelijk om tegelijkertijd op meerdere zoekopties te zoeken. Stel ik zit dan in de volgende situatie:

Gebruiker X heeft als kennis Windows 95 en Windows 98 in huis.
Gebruiker Y heeft als kennis Windows 98 in huis.

Stel dat de gebruiker nu zoekt naar personen met kennis van Windows 95 en Windows 98. Zijn resultaatscherm ziet er op dit moment dan ongeveer zo uit:

Gebruiker - Locatie - Kennis van?

Gebr. X - Adam - Windows 95
Gebr. X - Adam - Windows 98
Gebr. Y - Rdam - Windows 98

Maar wat ik wil is iets als dit:

Gebruiker - Locatie - Kennis van?

Gebr. X - Adam - Windows 95, Windows 98
Gebr. Y - Rdam - Windows 98

Uit de recordset die ik terugkrijg voor de query krijg ik dus een gebruikersID, gebruikersnaam, locatie v.d. gebruik en naam v.d. kennis die in huis is.

Ik loop door deze recordset heen om de resultaten aan de gebruiker te presenteren.

De query die op dit moment wordt gebruikt ziet er als volgt uit:

SQL:
1
2
3
4
5
SELECT  L.lidID, L.lidGemeente, U.lidUsername, Profiel.profielNaam
FROM    Users U INNER JOIN Leden L ON U.lidID = L.lidID INNER JOIN
    LedenProfiel LP ON L.lidID = LP.lidID INNER JOIN
    Profiel ON LP.profielID = Profiel.profielID
WHERE   LP.profielID IN (" & profielItems & ")"


Iemand enig idee of een tip hoe ik tot mijn gewenste resultaat kan komen?

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Waar wil je het oplossen? In je applicatie of in de database?

In het eerste geval kan je gewoon door de recordset loop-en en bij het wegschrijven van de gegevens alleen een nieuwe regel beginnen waneer de gebruikersnaam anders is t.o.v. de huidige regel.
Moet de result natuurlijk wel gesorteerd zijn op gebruikersnaam.

In het tweede geval zal je waarschijnlijk moeten kijken naar pivot tables (of hoe dat ook alweer heet, ik raak die naam telkens kwijt :o)

[ Voor 10% gewijzigd door Annie op 08-05-2003 12:45 . Reden: kleine aanvulling ]

Today's subliminal thought is:


  • Dope-E
  • Registratie: Januari 2001
  • Laatst online: 11-07 12:42

Dope-E

The one and only Dope

Ik zou DISTINCT gebruiken en dan aan de hand van de verkregen id's de rest opvragen.

twitter.com/curly_sanders


  • Kamikazi
  • Registratie: Juli 2001
  • Niet online
Annie schreef op 08 May 2003 @ 12:44:
Waar wil je het oplossen? In je applicatie of in de database?

In het eerste geval kan je gewoon door de recordset loop-en en bij het wegschrijven van de gegevens alleen een nieuwe regel beginnen waneer de gebruikersnaam anders is t.o.v. de huidige regel.
Moet de result natuurlijk wel gesorteerd zijn op gebruikersnaam.
In de applicatie dus :)

Kan je een voorbeeld in ASP geven hoe je dat ziet? Want ik zie dus niet hoe ik dat voor elkaar kan krijgen...

  • intGod
  • Registratie: Maart 2003
  • Niet online

intGod

Ars non postulat causam

Je moet een UDF (user defined function) maken in Sql Server. Of je moet door je recordset loopen. Da's nog makkelijker als je weinig SQL kent.

ASP:
1
2
3
4
5
6
7
8
intLastUserId = 0
while not rstOs.eof
  if rstOs("userId") & "" <> intLastUserId & "" then
    intLastUserId = rstOs("userId")
    response.write "<BR>" & rstOs("userName") & " " & rstOs("locatie")
  end if
  response.write rstOs("OperatingSystem") & " "
wend


je udf zou er zo uitzien:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
create function fnConcatOs
(
  @fIntUserId int
)
returns varchar(500)
as
declare @strOs varchar(500)
create crsOs cursor for
select Os from tbYourtable where userId = @fIntUserId
open crsOs
fetch next from crsOs into @strOs
set @strOs = ''
while @@fetch_status = 0
begin
  set @strOs = @strOs + isNull(@strOs + ', ','')
  fetch next from crsOs into @strOs
end
close crsOs
deallocate crsOs
return @strOs


Alle code is UNCHECKED en niet 100% netjes geschreven wegens uit de losse pols/hand/keyboard/klavier ...

[ Voor 11% gewijzigd door intGod op 08-05-2003 20:13 ]


  • sig69
  • Registratie: Mei 2002
  • Laatst online: 14:42
Kan je je tabelstructuur misschien ook even posten ter verduidelijking?

Roomba E5 te koop

Pagina: 1