Avatar billede Slettet bruger
26. juli 2013 - 10:29 Der er 11 kommentarer og
1 løsning

Distrinct udtræk efter dato

Hej

Jeg har en sql som skal trække data ud fra en tabel med følgende kolonner, galleri_id, galleri_kategori, foto_tekst, filnavn, opret_dato.

galleri_kategori er f.eks. jul 2012 og der vil muligvis være flere med denne kategori. Jeg skal hive samtlige forskellige galleri_katetori, ud sorteret efter opret_dato.

min kode ser sådan ud:

SQL="Select DISTINCT galleri_kategori, opret_dato from galleri order by opret_dato desc"
SET rs = Conn.Execute (SQL)

men den trækker hele molevitten ud, ikke kun én af hver galleri_kategori. Db er access og opret_dato er et datofelt.

Jeg har gennetrawlet eksperten.dk efter lignende problemer, samt også prøver funktionen GROUP, men uden held. Er det nogen eksperter som kan give et bud på løsning af dette?

mvh. rwj
Avatar billede MadsHaupt Juniormester
27. juli 2013 - 15:12 #1
Hvorfor kan du ikke bare tage den bagerste først?.

Hvordan man tager den bagerste førest i en array:
Dim array() As Object
Dim array2(array.Length - 1) As Object
Dim i2 As Integer = array.Length - 1
For i = 0 To array.Length - 1
        array2(i2) = array(i)
Next
Avatar billede Slettet bruger
27. juli 2013 - 17:19 #2
Jeg er ikke nået til det kapitel i bogen endnu som omhandler arrays:-)
Hvordan skal jeg mere præcist gøre for at bruge din kode?
Mvh. rwj
Avatar billede MadsHaupt Juniormester
27. juli 2013 - 21:38 #3
Den jeg har kaldt array er den array der skal sorteres, og den jeg har kaldt array2 er den der er sorteret, og grunden til at jeg angiver typen objekt er fordi jeg ikke ved hvilken type du bruger, Du skal bare erstatte det hvor der stor Object til den type du bruger, Og de to parenteser angiver at det er en array.

Du kan bruge denne funktion.
Kode:
Private Function Sorter(ByVal array() As Object) As Object()
        Dim array2(array.Length - 1) As Object
        Dim i2 As Integer = array.Length - 1
        For i = 0 To array.Length - 1
                array2(i2) = array(i)
        Next
        Return array2
End Function


:)
Avatar billede Slettet bruger
28. juli 2013 - 08:24 #4
jeg har indsat mine poster så koden ser således ud:


Private Function Sorter(ByVal array() As galleri_kategori) As opret_dato()
        Dim array2(array.Length - 1) As galleri_kategori
        Dim i2 As Integer = array.Length - 1
        For i = 0 To array.Length - 1
                array2(i2) = array(i)
        Next
        Return array2
End Function

og får en fejlmeddelse:

Microsoft VBScript compilation error '800a03ee'

Expected ')'

som er i første linie, mangler der et tegn der?

Mvh. rwj
Avatar billede Slettet bruger
28. juli 2013 - 08:32 #5
fik ikke hele kode med i første omgang den er sådan her:

galleri_kategori=rs("galleri_kategori")
opret_dato=rs("opret_dato")

Private Function Sorter(ByVal array() As galleri_kategori) As opret_dato()
        Dim array2(array.Length - 1) As galleri_kategori
        Dim i2 As Integer = array.Length - 1
        For i = 0 To array.Length - 1
                array2(i2) = array(i)
        Next
        Return array2
End Function
Avatar billede MadsHaupt Juniormester
28. juli 2013 - 11:19 #6
Det jeg mente med din type er for eksempel hvis det er text så er typen String eller hvis det er heltal så er typen Integer, eller hvis det er komma tal så er typen Double
Avatar billede Slettet bruger
28. juli 2013 - 11:37 #7
galleri_kategori er text og således en string

opret_dato er datoformat, hvilket format er så det?

Jeg føler mig på bar bund i din kode, kan ikke rigtig gennenskue funktionen, er du venlig at smide min galleri_kategori og opret_dato i?

Mvh. rwj
Avatar billede MadsHaupt Juniormester
28. juli 2013 - 12:14 #8
Ja det vil jeg gerne. :)

Kode:
Private Function Sorter(ByVal galleri_kategori() As String, ByVal opret_dato() As Date) As Object()()
        Dim array2_1(galleri_kategori.Length - 1) As String
        Dim array2_2(galleri_kategori.Length - 1) As Date
        Dim i2 As Integer = galleri_kategori.Length - 1
        For i = 0 To galleri_kategori.Length - 1
                array2_1(i2) = galleri_kategori(i)
                array2_2(i2) = opret_dato(i)
        Next
        Return {array2_1, array2_2}
End Function


Du bruger funktionen så dan her:
Dim result As Object()() = Sorter(galleri_kategori, opret_dato)
Dim resault_galleri_kategori() As String = result(0)
Dim resault_opret_dato() As Date = result(1)


Så får du en array af en array, et index starter med 0.
Avatar billede Slettet bruger
28. juli 2013 - 17:20 #9
Jeg har forsøgt at få det til at spille, men tror ikke at jeg har fattet pointen i arrays. Min kode ser nu sådan ud, og jeg får fejlmelding:

<b>Microsoft VBScript compilation error '800a0401'

Expected end of statement

test.asp, line 22

Dim result As Object()() = Sorter(galleri_kategori, opret_dato)
-----------^</b>


<!--#include file="../conn.asp"-->
<%

SQL="Select * from galleri"
SET rs = Conn.Execute (SQL)

galleri_kategori=rs("galleri_kategori")
opret_dato=rs("opret_dato")

Dim result As Object()() = Sorter(galleri_kategori, opret_dato)
Dim resault_galleri_kategori() As String = result(0)
Dim resault_opret_dato() As Date = result(1)


Private Function Sorter(ByVal galleri_kategori() As String, ByVal opret_dato() As Date) As Object()()
Dim array2_1(galleri_kategori.Length - 1) As String
Dim array2_2(galleri_kategori.Length - 1) As Date
Dim i2 As Integer = galleri_kategori.Length - 1
For i = 0 To galleri_kategori.Length - 1
array2_1(i2) = galleri_kategori(i)
array2_2(i2) = opret_dato(i)
Next
Return {array2_1, array2_2}
End Function

%>

hvad gør jeg galt?

mvh rwj
Avatar billede MadsHaupt Juniormester
28. juli 2013 - 21:19 #10
Jeg er ikke særlig god til asp.net, men jeg har lige testet det og fundet en mulig løsning.

Løsning:
<!--#include file="../conn.asp"-->
<%

SQL="Select * from galleri"
SET rs = Conn.Execute (SQL)

galleri_kategori=rs("galleri_kategori")
opret_dato=rs("opret_dato")

Dim galleri_kategori_() As String = galleri_kategori
Dim opret_dato_() As Date = opret_dato
Dim array2_1(galleri_kategori_.Length - 1) As String
Dim array2_2(opret_dato_.Length - 1) As Date
Dim i2 As Integer = galleri_kategori_.Length - 1
For i = 0 To galleri_kategori_.Length - 1
    array2_1(i2) = galleri_kategori_(i)
    array2_2(i2) = opret_dato_(i)
    i2 -= 1
Next
Dim result As Object() = {array2_1, array2_2}



Dim result_galleri_kategori() As String = result(0)
Dim result_opret_dato() As Date = result(1)

%>


Den sorterede galleri_kategori er i result_galleri_kategori, og den sorterede opret_dato er i result_opret_dato. :)
Avatar billede Slettet bruger
28. juli 2013 - 22:45 #11
Super, fik det til at køre, så mange tak for tålmodigheden og hjælpen.

Smid et svar og i øvrigt fortsat god sommer.

mvh. rwj
Avatar billede MadsHaupt Juniormester
29. juli 2013 - 09:20 #12
svar
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