Avatar billede steen_hansen Forsker
06. marts 2011 - 19:47 Der er 14 kommentarer og
1 løsning

Træk data ud, list alfabetisk startende med A osv

Jeg har en række navne, som jeg trækker ud med denne SQL:

<%

    Set RS = Conn.Execute("SELECT actorID, nameofactor FROM actors ORDER BY nameofactor ASC")

%>

Dette trækker samtlige navne ud i én lang række. Jeg kunne imidlertid godt tænke mig, at få alle navne opdelt i alfabetiske grupperinger. Eksempel:

A
Allan Allansen
Anders Andersen

B
Birger Birgensen
Birgitte Birgittesen
Bo Bosen

C
Charlotte Charlottesen

osv.

Nogen gode forslag?
Avatar billede steen_hansen Forsker
06. marts 2011 - 20:15 #1
Jeg glemte lige den løkke, som trækker navnene ud på siden:

<%

    If RS.EOF Then

%>

        <div class="<%=x%>">Der er enudu ikke oprettet skuespillere.</div>

<%

    End If

    If Not RS.EOF Then

        Do Until RS.EOF

%>

        <div class="<%=x%>"><a href="/members/filmlisten/editactor.asp?actorID=<%=RS("actorID")%>" title="Ret eller slet &quot;<%=RS("nameofactor")%>&quot;" onfocus="this.blur();" class="markdata"><%=x%>. <%=RS("nameofactor")%></a></div>

<%

        RS.Movenext
        Loop

    End If

    RS.Close
    Set RS = Nothing

    Conn.Close
    Set Conn = Nothing

%>
Avatar billede frozenink Nybegynder
06. marts 2011 - 20:36 #2
Hej
Kender du denne side, http://www.w3schools.com/sql/sql_orderby.asp
Den er rigtig god.

Prøv at se på tabellen i det SQL link jeg sender, så ved du om der skal oprettes en tabel med "for" og "efter" navne, og der sortere i dem.
Avatar billede steen_hansen Forsker
06. marts 2011 - 20:51 #3
Ok, men hvordan får jeg opdelt dem under A, B, C osv? Den løkke, jeg har postet, tager samtlige og kører ud i én lang række under hinanden.
Avatar billede frozenink Nybegynder
06. marts 2011 - 21:00 #4
det er din SQL du skal arbejde med.
Hvordan er din DB / tabeller navngivet?

Har du en tabel med LastName *** FirstName eller som jeg næsten har gættet "nameofactor" hvor for og efternavn er kørt ud i een smøre.

hvis du vil sortere, kan du gøre det sådan her - ORDER BY LastName DESC
Avatar billede claes57 Ekspert
06. marts 2011 - 21:11 #5
du skal bare tage et startbogstav ad gangen, og så køre 28 gange.
rutinen til de 28 gennemløb skal være noget i stil med dette, som jeg har fra noget asp, der er 15 år gammelt.

        strSQL = strSQL & strItem & " >= '" & left(strAlfa,1) & "%'"
        select case right(strAlfa,1)
        case "Z"
        strSQL=strSQL & " AND " & strItem & " < 'Æ%'"
        case "Å"
        case else
        strSQL=strSQL & " AND " & strItem & " < '" & chr(asc(right(strAlfa,1))+1) & "%'"
        end select

den kunne i sin tid vælge by/gade/firma på startbogstav.
Så det er noget med >= et bogstav og < end bogstavet efter - undtagen for å, der ikke har et efterfølgende bogstav.
Avatar billede steen_hansen Forsker
06. marts 2011 - 21:37 #6
frozenink: Det er korrekt, der er actorID (primary key) og nameofactor, ud i én smørre. Men der skal bare sorteres på fornavnet, og det tilhørende bogstav skal knyttes til fornavnene. Men det skal gerne ind i løkken

A
Anders Mathesen

B
Bo Bendixen

osv

claes57: Den skal der vist kigges på :) Men det ser (vistnok) fornuftigt ud :)
Avatar billede claes57 Ekspert
07. marts 2011 - 11:33 #7
det bliver så noget med
<%
tegn = "abcdefghijklmnopqrstuvwxyzæøå"
for i = 1 to len(tegn)
  strsql = "SELECT actorID, nameofactor FROM actors ORDER BY nameofactor"
  starttegn = mid(tegn,i,1)
  strsql = strsql & " where nameofactor >= '" & starttegn & "%'"
  if i < len(tegn) then
    sluttegn = mid(tegn,i+1,1)
    strsql = strsql & " and nameofactor < '" & sluttegn & "%'"
  end if
  Set RS = Conn.Execute(strsql)
  if not RS.EOF then
    response.write ucase(starttegn) & "<br>"
    while not RS.EOF
      response.write datapåenskuespiller & "<br>"
      RS.Movenext
    wend
    response.write "<br>"
  end if
next
Avatar billede steen_hansen Forsker
09. marts 2011 - 11:46 #8
Hej claes57

Jeg kan se logikken i det, men kan ikke helt gennemskue hvad der sker, jeg kan ikke få det til at spille ordentligt. Er det muligt for dig at uddybe lidt mht. mid(tegn,i+1,1) mm? Jeg går ud fra, at det er et tjek på det første bogstav i navnet, men det er så længe siden jeg har rodet med det, jeg har ikke meget føling med det mere.
Avatar billede claes57 Ekspert
09. marts 2011 - 12:15 #9
<%
' der skal udskrives i denne række
tegn = "abcdefghijklmnopqrstuvwxyzæøå"

' kør tegnrækken igennem
for i = 1 to len(tegn)

  ' standardkald som basis
  strsql = "SELECT actorID, nameofactor FROM actors ORDER BY nameofactor"
  ' tag et tegn i rækken
  starttegn = mid(tegn,i,1)
  ' tilføj at skuespiller skal starte med dette tegn
  strsql = strsql & " where nameofactor >= '" & starttegn & "%'"
  ' hvis vi ikke er på sidste tegn i rækken, så stop før næste tegn
  if i < len(tegn) then
    sluttegn = mid(tegn,i+1,1)
    strsql = strsql & " and nameofactor < '" & sluttegn & "%'"
  end if
  Set RS = Conn.Execute(strsql)
  if not RS.EOF then
    ' hvis der er hentet data, så start med at skrive fx A + linjeskift
    response.write ucase(starttegn) & "<br>"
    while not RS.EOF
      ' udskriv nu de data der skal være pr skuespiller, og afslut med linjeskift
      response.write datapåenskuespiller & "<br>"
      RS.Movenext
    wend
    response.write "<br>"
  end if
next
%>

så ved første gennemløb skulle den gerne danne
SELECT actorID, nameofactor FROM actors ORDER BY nameofactor where nameofactor >= 'a%' and nameofactor < 'b%'
Avatar billede steen_hansen Forsker
20. marts 2011 - 21:04 #10
Undskyld den sene besvarelse, jeg får kigget på det hurtigst muligt. Og foreløbigt stor tak for dit svar, du har lagt et pænt stykke arbejde i det, jeg håber det virker :)
Avatar billede steen_hansen Forsker
26. marts 2011 - 19:49 #11
claes57, der mangler at få A, B, C, D .... sat ind for hver gang navn skifter bogstav, f.eks. fra A til B. Jeg får listet A rigtigt: nok:

A
Arnold
Anders
Allan

- men herefter fortsætter resten ud i én køre. Allernederst kommer

B
C
D
E
F

osv. Dvs. når navne startende med A er slut, kommer der ikke B osv.

response.write ucase(starttegn) & "<br>"

udskriver rigtigt nok A. Herefter bliver samtlige records skrevet ud.

Til allersidst kommer de resterende <%=starttegn%>, efter alle navnene
Avatar billede steen_hansen Forsker
26. marts 2011 - 19:51 #12
A
Allan
Anders
Arnold
Bent
Børge
Charlotte
Dorthe
B
C
D
E
F
G
H
I
.........

I stedet for:

A
Allan
Anders
Arnold

B
Bent
Børge

C
Charlotte

D
Dorthe
...........
Avatar billede steen_hansen Forsker
27. marts 2011 - 00:10 #13
claes57:

Jeg tog den lange vej, og jeg synes det virker bedre med

WHERE firstname LIKE 'a%'

i stedet for

MID(firstname,1,1)

Jeg kan jo tage fejl, men jeg kan ikke få dit script til at virke, selvom det er meget ærgeligt ikke at køre det igennem en løkke.

Det (halv)færdige resultat

<%

    vCharacterID = Request.QueryString("characterID")

    If vCharacterID = 1 Then
        Set RSA = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 1 & " And firstname LIKE 'a%' ORDER BY firstname, lastname")
        Set RSB = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 1 & " And firstname LIKE 'b%' ORDER BY firstname, lastname")
        Set RSC = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 1 & " And firstname LIKE 'c%' ORDER BY firstname, lastname")
    ElseIf vCharacterID = 2 Then
        Set RSA = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 2 & " And firstname LIKE 'a%' ORDER BY firstname, lastname")
        Set RSB = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 2 & " And firstname LIKE 'b%' ORDER BY firstname, lastname")
        Set RSC = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE typeofcharacter = " & 2 & " And firstname LIKE 'c%' ORDER BY firstname, lastname")
    ElseIf vCharacterID = 3 Then
        Set RSA = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE firstname LIKE 'a%' ORDER BY firstname, lastname")
        Set RSB = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE firstname LIKE 'b%' ORDER BY firstname, lastname")
        Set RSC = Conn.Execute("SELECT actorID, firstname, lastname, typeofcharacter FROM privatfilmactor WHERE firstname LIKE 'c%' ORDER BY firstname, lastname")
    End If

%>

        <%

            If RSA.EOF Then

        %>

                <div class="headlineunderlined">A</div>
                <div class="divAvailableGenres1">Der er enudu ikke oprettet skuespillere.</div>

        <%

            End If

            If Not RSA.EOF Then

        %>

                <div class="headlineunderlined">A</div>

        <%

                Do Until RSA.EOF

        %>

                <div class="divAvailableGenres1"><a href="/members/movies/editcharacter.asp?characterID=<%=RSA("actorID")%>" title="Redig&#233;r eller slet &quot;<%=RSA("firstname")%>&nbsp;<%=RSA("lastname")%>&quot;" onfocus="this.blur();" class="<% If RSA("typeofcharacter") = "1" Then %>markdata1<% ElseIf RSA("typeofcharacter") = "2" Then %>markdata2<% End If %>"><%=x%>. <%=RSA("firstname")%>&nbsp;<%=RSA("lastname")%></a></div>

        <%

                x = x + 1

                RSA.Movenext
                Loop

            End If

            If RSB.EOF Then

        %>

                <div class="headlineunderlined">B</div>
                <div class="divAvailableGenres1">Der er enudu ikke oprettet skuespillere.</div>

        <%

            End If

            If Not RSB.EOF Then

        %>

                <div class="headlineunderlined">B</div>

        <%

                Do Until RSB.EOF

        %>

                <div class="divAvailableGenres1"><a href="/members/movies/editcharacter.asp?characterID=<%=RSB("actorID")%>" title="Redig&#233;r eller slet &quot;<%=RSB("firstname")%>&nbsp;<%=RSB("lastname")%>&quot;" onfocus="this.blur();" class="<% If RSB("typeofcharacter") = "1" Then %>markdata1<% ElseIf RSB("typeofcharacter") = "2" Then %>markdata2<% End If %>"><%=x%>. <%=RSB("firstname")%>&nbsp;<%=RSB("lastname")%></a></div>

        <%

                x = x + 1

                RSB.Movenext
                Loop

            End If

            If RSC.EOF Then

        %>

                <div class="headlineunderlined">C</div>
                <div class="divAvailableGenres1">Der er enudu ikke oprettet skuespillere.</div>

        <%

            End If

            If Not RSC.EOF Then

        %>

                <div class="headlineunderlined">C</div>

        <%

                Do Until RSC.EOF

        %>

                <div class="divAvailableGenres1"><a href="/members/movies/editcharacter.asp?characterID=<%=RSC("actorID")%>" title="Redig&#233;r eller slet &quot;<%=RSC("firstname")%>&nbsp;<%=RSC("lastname")%>&quot;" onfocus="this.blur();" class="<% If RSC("typeofcharacter") = "1" Then %>markdata1<% ElseIf RSC("typeofcharacter") = "2" Then %>markdata2<% End If %>"><%=x%>. <%=RSC("firstname")%>&nbsp;<%=RSC("lastname")%></a></div>

        <%

                x = x + 1

                RSC.Movenext
                Loop

            End If

            RSA.Close
            Set RSA = Nothing

            RSB.Close
            Set RSB = Nothing

            RSC.Close
            Set RSC = Nothing

%>

Selvom jeg ikke kan få dit script til at virke, har lagt arbejde i det :o) Kan du ikke lægge et svar? Og tak for input.

Hvis du får mod på at få det til at virke, er jeg meget interesseret i at se løsningen :o)
Avatar billede steen_hansen Forsker
03. juli 2011 - 20:05 #14
Hej claes57

Jeg tror det er på tide, at lukke spørgsmålet. Råb højt, og jeg opretter et nyt spørgsmål, du kan besvare.
Avatar billede claes57 Ekspert
04. juli 2011 - 09:44 #15
det er helt ok med mig - jeg ved ikke, hvorfor jeg i sin tid ikke selv havde
WHERE firstname LIKE 'a%'
med i koden - min er var 'nærmeste omvej'
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