Avatar billede kaptajnknas Nybegynder
08. januar 2007 - 19:49 Der er 33 kommentarer og
1 løsning

Response.write en gang

Nogen der har enmulig løsning på følgende?

Hvis en titel har været vist en gang, må samme titel ikke vises igen.
Jeg gennemløber databasen med et loop.

Funktionen DISTINCT kan ikke bruges da jeg skal søge i hele databasen, så det kan måske laves med en form for array??
Avatar billede keysersoze Ekspert
08. januar 2007 - 20:25 #1
Om det kan løses med et Array eller ej er svært at svare på uden at vide lidt mere om projektet - men siden du ikke kan køre distinct må det være fordi du hiver andre værdier med ud og som formentlig også udskrives i dit loop. og i så fald tror jeg at hurtigste løsning vil være dette;

var = ""
If var <> rs("val") Then
  Response.Write rs("val")
  var = rs("val")
End If

Da du formentlig ellers vil skulle arbejde med flere loops
Avatar billede softspot Forsker
08. januar 2007 - 21:00 #2
...men den løsning vil vel kræve at resultatet i det mindste er sorteret og at kriteriet for en dublet kun hidrører en kolonne.
Avatar billede kaptajnknas Nybegynder
08. januar 2007 - 21:05 #3
Ja præcis, og løsningen kan heller ikke bruger ved sideskift/paging umiddelbart, da en "var" ikke kan sættes i querystring.
Avatar billede kaptajnknas Nybegynder
08. januar 2007 - 21:06 #4
bruger = bruges
Avatar billede keysersoze Ekspert
08. januar 2007 - 21:09 #5
korrekt - der er nogle begrænsninger og nogle forudsætninger. Men hvilke muligheder der ellers er kræver næsten et bedre oplæg da det ellers let kan blive tungt at køre.
Avatar billede softspot Forsker
08. januar 2007 - 21:20 #6
keysersoze >> enig :)
Avatar billede lordnelson Seniormester
08. januar 2007 - 22:18 #7
Kan ikke helt se hvorfor distinct ikke kan bruges
hvis der er noget under den titel
altså flere poster med samme tittel,
kan dette køres i et andet lookup
i forhold til titlen?


LN
Avatar billede kaptajnknas Nybegynder
08. januar 2007 - 22:21 #8
Ja der er eks. 100 poster der bliver gennemløbet og her er måske 30 poster med samme titel, derfor ønsker jeg kun 1 post vist, da alle linker til det samme emne.

Har du evt. et eks. på hvordan du vil køre et ekstra/andet lookup?
Avatar billede softspot Forsker
08. januar 2007 - 22:46 #9
Så synes jeg jo netop distinct er det du har brug for...
Avatar billede kaptajnknas Nybegynder
08. januar 2007 - 22:53 #10
Jamen hvis jeg bruger DISTICT i samme select, søges der jo kun i den første, det gør jo søgeresultatet meget dårligt.
Avatar billede softspot Forsker
08. januar 2007 - 23:00 #11
Det er temmelig svært at forholde sig til de noget abstrakte informationer du giver om din problemstilling. Du vil få meget hurtigere og mere kvalificeret hjælp, hvis du giver os noget konkret at arbejde med. F.eks. kunne det være interessant at se din datastruktur og evt. relationer (hvis der er flere tabeller). Det kunne også være rart at have en konkret beskrivelse af hvad du så vil have ud af dine data i dette scenarie. Hjælp os med at hjælpe dig :)
Avatar billede softspot Forsker
08. januar 2007 - 23:01 #12
Jeg mener naturligvis, for denne problemstilling, relevante databasestruktur og ikke alle tabeller m.m. i din database :)
Avatar billede keysersoze Ekspert
08. januar 2007 - 23:41 #13
giv evt et link til resultatet som det er uden distinct så vi kan se hvordan det er nu - kan måske give et bedre overblik
Avatar billede lordnelson Seniormester
09. januar 2007 - 08:36 #14
Lidt afhængig af hvordan du vil viset det kan det gøres sådan

Du har et view (tror det hedder en forespørgsel på dansk)

Herffra henter du feks overskrift
rs.open="Select distinct overskrift from view"
if not rs.eof then
Do while not rs.eof
Response.write "Overskrift: " & rs("overskrift")
rs2.open "Select det nye i view where overskiftID = " & rs("overskriftID") &""
if not rs2.eof then
do while not rs2.eof
Response.write "Her er posterne under overskrift " & rs2("Feltnavn") & "
rs2.movenext
loop
rs.close
end if
rs2movenext
loop
end if
rs.close

LN
Avatar billede kaptajnknas Nybegynder
09. januar 2007 - 11:31 #15
lordnelson >> er ikke helt med på dit foreslag, jeg har dog prøvet følgende her:

<%
'Finder mine resultater
ResponseList = ""
Set rs = Conn.Execute("SELECT * FROM data WHERE request = '" & query & "'")

'Gemmer id i Array
Do While Not rs.EoF
    If ResponseList <> "" Then ResponseList = ResponseList & "|"
    ResponseList = ResponseList & rs("id")
    rs.MoveNext
Loop

ResponseArr = Split(ResponseList, "|")

For idx=LBound(ResponseArr) To UBound(ResponseArr)
Next

'Henter DISTINCT fra database
Set rs = Conn.Execute("SELECT DISTINCT titel FROM data WHERE id IN ('" & ResponseArr & "')")

Do While Not rs.eof
Response.Write rs("titel")
rs.movenext
Loop
%>

Men jeg får en type error i select DISTINCT?
Burde dette ikke virke?
Avatar billede goose Nybegynder
09. januar 2007 - 11:52 #16
skal det ikke være:  ..... SELECT DISTINCT id,titel ..... altså så du også får id med?

/Goose
Avatar billede softspot Forsker
09. januar 2007 - 12:03 #17
Separator i en IN i SQL er komma, så du kan bare gøre såleds:

<%
'Finder mine resultater
ResponseList = ""
Set rs = Conn.Execute("SELECT * FROM data WHERE request = '" & query & "'")

'Gemmer id i kommasepareret streng
Do While Not rs.EoF
  If ResponseList <> "" Then ResponseList = ResponseList & ","
  ResponseList = ResponseList & rs("id")
  rs.MoveNext
Loop

'Henter DISTINCT fra database
Set rs = Conn.Execute("SELECT DISTINCT titel FROM data WHERE id IN ('" & ResponseList & "')")

Do While Not rs.eof
  Response.Write rs("titel")
  rs.movenext
Loop
%>

Selvom det for mig at se er nogenlunde det samme som at gøre således:

<%
Set rs = Conn.Execute("SELECT DISTINCT titel FROM data WHERE request = '" & query & "'")
Do While Not rs.eof
  Response.Write rs("titel")
  rs.movenext
Loop
rs.close
%>
Avatar billede softspot Forsker
09. januar 2007 - 12:05 #18
...altså bort set fra at den sidste version jeg viste performer væsentlig bedre end den tilpassede version af dit eget ;-)
Avatar billede lordnelson Seniormester
09. januar 2007 - 12:10 #19
er lidt svært at skrive det korrekst når man ikke ved have du vil have op
Men skriver du
SELECT DISTINCT titel FROM data WHERE id IN Skal du også hente Id op
altså selct distinct titel, id  from osv osv

du kan ikke bruge ID hvis dett ikke bliver hentet med op

LN
Avatar billede softspot Forsker
09. januar 2007 - 12:13 #20
lordnelson >> Det er ikke korrekt. Man kan godt referere til en kolonne i WHERE-clause uden at den er udvalgt i select-listen.
Avatar billede lordnelson Seniormester
09. januar 2007 - 12:26 #21
Nå nå
Så forklar lige den her:
katID = 2
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open Application("sql")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.open "select distinct kategori where kategoriId= " & katId & "", conn, , , adCmdText
response.write rs("kategori")

rs.close
conn.close
%>

Her får jeg fejlen:
Microsoft OLE DB Provider for SQL Server error '80040e14'

Invalid column name 'kategoriId'.

/sjov.asp, line 14

Du må meget gerne forklare denne fejl
for hvis jeg skriver
select distinct kategori, kategoriID where kategoriId= " & katId & "",

Så virker skidtet

LN
Avatar billede lordnelson Seniormester
09. januar 2007 - 12:29 #22
Undskyld til softspot du havde ret

LN
Avatar billede lordnelson Seniormester
09. januar 2007 - 12:33 #23
Lige en ting alligevel

Hvis man kun henter titel op
kan man jo ikke bruge id til at finde de næste poster
der hænger sammen med ID.
Tænker mere på hvis det er flere tabeller der hænger sammen
i et diagram er man jo tvunget til at hente ID med op
da' man jo sjældent hænget tabellerne sammen med en titel tekst

så hvorfor jeg ville have ID med op var for at finde de
poster hvor ID i den næste tabel(view) hænger sammen med det
id der bliver hentet.

LN
Avatar billede softspot Forsker
09. januar 2007 - 12:39 #24
Jeg tror vi skal vente på at spørger kommer med lidt mere feedback, så vi ikke spilder en masse tid på diverse forslag til hvad det er vi skal løse...
Avatar billede softspot Forsker
09. januar 2007 - 12:41 #25
...men for nu lige at adressere din opstillede problemstilling, så kan man benytte paging i recordsets, hvilket giver dig mulighed for at hente en given side ud fra et sidenr, hvilket gør dig uafhængig af id'et.
Avatar billede kaptajnknas Nybegynder
09. januar 2007 - 13:01 #26
softspot >> jeg kan ikke bruge DISTINCT hvor jeg søger med mit query, da jeg så ikke får gennemløbet alle rækker i kolonnen.

Derfor må jeg starte med at søge fra top til tå i databasen og derefter sorterer udtrækket så der kun vises et emne selvom der måske findes 30 steder i databasen hvor de givne søgeord forekommer.
Avatar billede softspot Forsker
09. januar 2007 - 13:14 #27
Jeg vil påstå at den select distinct jeg foreslog i indlæget pr. 09/01-2007 12:03:47, finder ligeså meget som de to forspørgsler ellers blev foreslået.

At du ikke får gennemløbet alle rækker er vel underordnet idet du vil opnå at udtrække de titler hvor dit kriterie passer. Så med mindre du skal bruge mere fra din tabel end titel, så kan jeg ikke se hvorfor distinct ikke kan bruges...
Avatar billede lordnelson Seniormester
09. januar 2007 - 13:26 #28
Kan kun give softspot ret
Tror jeg ståe af her
hej
LN
Avatar billede kaptajnknas Nybegynder
09. januar 2007 - 13:36 #29
Jeg foretager søgning i kolonnen beskrivelser og viser så titel/emnet hertil, det er vel ligesom et forum, hvor en tråd har samme emne hele vejen igennem og med forskellig indhold i indlæg.
Avatar billede softspot Forsker
09. januar 2007 - 13:44 #30
Dvs. det du vil opnå er at vise de emner (for nu at blive i forumanalogien), hvori der findes indlæg som har et givent tekstfragment?

Igen vil jeg påstå (og det er en rent teoretisk baseret påstand), at hvis du prøver at køre den select distinct som vi har snakket om her i denne tråd og kontrollerer datagrundlaget, så vil du opdage at de emner der vises rent faktisk også indeholder mindst et indlæg med den tekst du søger. Test er en god metode til at undersøge om noget fungerer som det skal... :)
Avatar billede kaptajnknas Nybegynder
09. januar 2007 - 14:37 #31
Jeg har testet og jeg får 44 af samme emner ud, javel beskrivelsen i disse poster indeholder rigtig nok søgeordet, men jeg har stadig kun brug for et link til emnet og ikke 44.

Den allerførste post med et givent emne sætter jeg et kategori nummer ved, så hvis jeg så bare kunne gå tilbage i kaldet og kun udskrive de emner der er forskellig fra <> '0' så vil der også kun komme et emne ud.
Avatar billede softspot Forsker
09. januar 2007 - 15:48 #32
Kan du ikke lige vise den konkrete SQL du fyrer af mod databasen?
Avatar billede kaptajnknas Nybegynder
09. januar 2007 - 18:29 #33
Jeg vælger i første omgang at søge i titel og den første beskrivelse i hver kolonne, så kan det klares med en enkelt select, tror det andet vil fungerer bedst hvis jeg ændre databasestrukturen og evt. tilføjer ekstra kolonne.

SQL = "SELECT * FROM data WHERE titel LIKE '%" & queryx & "%' OR beskrivelse LIKE '%" & queryx & "%' AND kategori <> '0' ORDER by id DESC LIMIT "& currentPage &","& pageSize &""

Men kategori <> '0' bliver bare ignoreret, har jeg overset noget??
Avatar billede kaptajnknas Nybegynder
10. januar 2007 - 10:05 #34
Kommer ikke videre, så lukker spg. her.
Tak for hjælpen :)
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
Kurser inden for grundlæggende programmering

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