Avatar billede sixer Nybegynder
11. august 2004 - 20:43 Der er 9 kommentarer og
1 løsning

mysql udtræk og sortering

Hej.

Jeg har 6 tabeller i min MySQL db.

stem_hiphopchart
hiphopchart
stem_rockchart
rockchart
stem_dancechart
dancechart

Stem_hiphopchart og stem_rockchart er ens
hiphopchart og rockchart er ens

Ang. strukturen.


****** erstatter bare chart navnet :)

Stem_******chart tabellen indholder:
id - kunstner - sang - genre


******chart tabellen indholder:
id - nr - uge - aar - trackid


Det jeg så gerne vil have hjælp til er at sortere de 3 bedste inden for en bestemt genre.

fx hvis der ligger et nummer #13 på hiphopcharten, et andet #4 på rockcharten og et tredje #20 på dancecharten - så skal #4 stå som #1, #13 som #2 og #20 som #3


Jeg har kun fundet ud af at gøre det med 1 chart.

Her er koden:

genre = "pop"
uge = "32"

StrSQL = ""

StrSQL = StrSQL & "SELECT "
StrSQL = StrSQL & "stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart.trackid, hiphopchart.id "
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_hiphopchart, hiphopchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_hiphopchart.id = hiphopchart.trackid and stem_hiphopchart.genre = '"& genre &"' and hiphopchart.uge = "& uge &" "
StrSQL = StrSQL & "order by hiphopchart.nr asc"

'Response.Write StrSQL

Set rs = Conn.Execute(StrSQL)

Do until rs.EOF
      Response.Write rs("id") &" - "& rs("nr") &"<br>"
rs.MoveNext
loop



Skriv hvis I ikke forstår.

På forhånd tak

/Sixer
Avatar billede sixer Nybegynder
11. august 2004 - 21:10 #1
Vigtigt!!!!

Der er flere charts end dem jeg har skrevet der, der er f.eks. singlechart, albumcharts og radiocharts.
Avatar billede eagleeye Praktikant
12. august 2004 - 00:59 #2
Du skal bruge UNION og så kan du lave et alias for hver kolonne, så du kan lave en ORDER BY og bruge det alias:

StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_hiphopchart.genre as genre, hiphopchart.nr as nr, hiphopchart.trackid as trackid, hiphopchart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_hiphopchart, hiphopchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_hiphopchart.id = hiphopchart.trackid and stem_hiphopchart.genre = '"& genre &"' and hiphopchart.uge = "& uge &" )"
StrSQL = StrSQL & " UNION "
StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_dancechart.genre as genre, dancechart.nr as nr, dancechart.trackid as trackid, dancechart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_dancechart, dancechart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_dancechart.id = dancechart.trackid and stem_dancechart.genre = '"& genre &"' and dancechart.uge = "& uge &" )"
StrSQL = StrSQL & " UNION "
StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_rockchart.genre as genre, rockchart.nr as nr, rockchart.trackid as trackid, rockchart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_rockchart, rockchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_rockchart.id = rockchart.trackid and stem_rockchart.genre = '"& genre &"' and rockchart.uge = "& uge &" )"
StrSQL = StrSQL & " UNION "
StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_singlechart.genre as genre, singlechart.nr as nr, singlechart.trackid as trackid, singlechart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_singlechart, singlechart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_singlechart.id = singlechart.trackid and stem_singlechart.genre = '"& genre &"' and singlechart.uge = "& uge &" )"
StrSQL = StrSQL & " UNION "
StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_albumchart.genre as genre, albumchart.nr as nr, albumchart.trackid as trackid, albumchart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_albumchart, albumchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_albumchart.id = albumchart.trackid and stem_albumchart.genre = '"& genre &"' and albumchart.uge = "& uge &" )"
StrSQL = StrSQL & " UNION "
StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_radiochart.genre as genre, radiochart.nr as nr, radiochart.trackid as trackid, radiochart.id as id"
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_radiochart, radiochart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_radiochart.id = radiochart.trackid and stem_radiochart.genre = '"& genre &"' and radiochart.uge = "& uge &" )"
StrSQL = StrSQL & " order by nr asc limit 3"


Se evt mere omkring UNION her:
http://dev.mysql.com/doc/mysql/en/UNION.html
Avatar billede sixer Nybegynder
22. august 2004 - 20:44 #3
Jeg kan ikke rigtig få det til at virke, den kommer med en sjov fejl. Kan ikke lige huske hvilken, da jeg har fundet på en anden måde at gøre det på.
Avatar billede eagleeye Praktikant
22. august 2004 - 22:10 #4
ok, du kunne havde postet de fejl du fik :)
hvordan har du så løst det?
Avatar billede sixer Nybegynder
22. august 2004 - 23:43 #5
Det kunne jeg ikke på det tidspunkt da jeg testede det, for var ikke på nettet. Lavede det på min IIS server.

Jeg lavede det sådan her:

StrUge = DatePart("ww", date(), vbMonday, vbFirstFourDays) '//Her finder den ud af hvilken uge vi er i
StrAar = year(date()) '//Her finder den ud af hviket år vi er i
StrTabeller = "hiphopchart,rockchart"
genre = "pop,techno"

StrSplit = Split(genre,",")

For a = 0 to ubound(StrSplit)

    StrSplit2 = Split(StrTabeller,",")

    For i = 0 to Ubound(StrSplit2)
        table = StrSplit2(i)

        StrSQL = ""

        StrSQL = StrSQL & "SELECT "
        StrSQL = StrSQL & "stem_"& table &".genre, stem_"& table &".id, "& table &".nr, "& table &".trackid as trackidet, "& table &".id as idet "
        StrSQL = StrSQL & "FROM "
        StrSQL = StrSQL & "stem_"& table &", "& table &" "
        StrSQL = StrSQL & "WHERE "
        StrSQL = StrSQL & "stem_"& table &".id = "& table &".trackid and stem_"& table &".genre = '"& StrSplit(a) &"' and "& table &".uge = "& StrUge &" "
        StrSQL = StrSQL & "order by "& table &".nr asc"

        'Response.Write StrSQL

        Set rs = Conn.Execute(StrSQL)

        Do until rs.EOF
            Set rs2 = Conn.Execute("Select * From "& table &" where id = "& rs("idet") &"")
            Set rs3 = Conn.Execute("Select * From stem_"& table &" where id = "& rs("trackidet") &"")
            StrSQL_inset = "Insert into genrechart (kunstner,sang,nr,uge,aar,selskab,genre) Values ('"& Replace(rs2("kunstner"),"'","´") &"','"& Replace(rs2("sang"),"'","´") &"',"& rs("nr") &","& StrUge &","& StrAar &",'"& Replace(rs3("selskab"),"'","´") &"','"& StrSplit(a) &"')"
            Conn.Execute(StrSQL_inset)
        rs.MoveNext
        loop

    Next

Next


Ved ikke det er den bedste måde, men den virker
Avatar billede sixer Nybegynder
23. august 2004 - 15:22 #6
Her er fejlen:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[MySQL][ODBC 3.51 Driver][mysqld-3.23.57]You have an error in your SQL syntax near '(SELECT stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart' at line 1

/html/genre3.asp, line 35


Koden:
genre = "pop"
uge = "32"

StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart.trackid, hiphopchart.id "
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_hiphopchart, hiphopchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_hiphopchart.id = hiphopchart.trackid and stem_hiphopchart.genre = '"& genre &"' and hiphopchart.uge = "& uge &") "

StrSQL = StrSQL & "UNION "

StrSQL = StrSQL & "SELECT "
StrSQL = StrSQL & "stem_rockchart.genre, stem_rockchart.id, rockchart.nr, rockchart.trackid, rockchart.id "
StrSQL = StrSQL & "FROM "
StrSQL = StrSQL & "stem_rockchart, rockchart "
StrSQL = StrSQL & "WHERE "
StrSQL = StrSQL & "stem_rockchart.id = rockchart.trackid and stem_rockchart.genre = '"& genre &"' and rockchart.uge = "& uge &" "

'StrSQL = StrSQL & "order by hiphopchart.nr asc"


Response.Write StrSQL &"<br><br><br><br>"

set rs = conn.execute(""& StrSQL &"") 'dette er linje 35
Avatar billede eagleeye Praktikant
23. august 2004 - 21:11 #7
I den føste SELECT er der to id kolonner

StrSQL = StrSQL & "(SELECT "
StrSQL = StrSQL & "stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart.trackid, hiphopchart.id "

Prøv kun at tage en ene med eller kalde lave et alias for den:

StrSQL = "(SELECT "
StrSQL = StrSQL & "stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart.trackid, hiphopchart.id as hiphopid "


hvordan ser det ud når du udskriver strSQL?
Avatar billede sixer Nybegynder
23. august 2004 - 23:19 #8
Det så sådan her ud når det var jeg udskrev StrSQL

(SELECT stem_hiphopchart.genre, stem_hiphopchart.id, hiphopchart.nr, hiphopchart.trackid, hiphopchart.id FROM stem_hiphopchart, hiphopchart WHERE stem_hiphopchart.id = hiphopchart.trackid and stem_hiphopchart.genre = 'pop' and hiphopchart.uge = 32) UNION SELECT stem_rockchart.genre, stem_rockchart.id, rockchart.nr, rockchart.trackid, rockchart.id FROM stem_rockchart, rockchart WHERE stem_rockchart.id = rockchart.trackid and stem_rockchart.genre = 'pop' and rockchart.uge = 32


Kan lige prøve at lave et alias
Avatar billede sixer Nybegynder
18. september 2004 - 16:59 #9
Kom lige med et svar
Avatar billede eagleeye Praktikant
18. september 2004 - 17:24 #10
Ok her et 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