Avatar billede killerviruz Nybegynder
19. maj 2005 - 13:36 Der er 12 kommentarer og
1 løsning

Temporary Table og Union i ASP

Jeg har et lille problem med at eksekvere et stykke SQL i ASP.
Jeg har to tabeller i min database som indeholder brugerkommentarer, og det jeg prøver på er at tælle alle kommentarer sammen for hver enkelt bruger, for derved at kunne generere en liste over de mest aktive brugere...
Jeg er kommet frem til at følgende SQL streng klarer dette fint, uden problemer hvis jeg eksekverer direkte i MySQL:

CREATE TEMPORARY TABLE tmp (
        Comments  INT(4) DEFAULT NULL,
    UserID    INT(4) DEFAULT NULL);

INSERT INTO tmp
(SELECT COUNT(CommentID) AS Comments, CommentUserID AS UserID FROM newscomments GROUP BY CommentUserID)
UNION
(SELECT COUNT(PhotoCommentID), PhotoCommentUserID FROM photocomments GROUP BY PhotoCommentUserID)
ORDER BY UserID;

SELECT SUM(Comments) AS TotalComments, UserID FROM tmp GROUP BY UserID;

UNLOCK TABLES;

DROP TABLE tmp;

Men hvis jeg eksekverer i ASP via MyODBC driverne, så brokker den sig:

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

[MySQL][ODBC 3.51 Driver][mysqld-4.1.9-nt]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ';INSERT INTO tmp (SELECT COUNT(CommentID) AS Comments, CommentUs

Håber der er nogen der kan hjælpe mig med at finde ud af hvorfor MySQL fint vil acceptere kommandoen, men at MyODBC driverne spytter det hele ud igen.
Avatar billede ksoren Nybegynder
19. maj 2005 - 14:39 #1
google siger at MyODBC kun godtager en enkelt sætning ad gangen
Avatar billede killerviruz Nybegynder
19. maj 2005 - 14:50 #2
Hmmm... nogen ideer om hvordan man kan få den til at sluge flere sætninger på én gang?
Avatar billede arne_v Ekspert
19. maj 2005 - 18:12 #3
Du eksekverer bare sætningerne enkeltvist.

En

con.Execute

per sætning.
Avatar billede sth Novice
19. maj 2005 - 21:11 #4
enig med arne, men tror dog også at du lige skal have nogle loop's eller ligende i din INSERT-sætnign,
Avatar billede killerviruz Nybegynder
20. maj 2005 - 18:35 #5
Det virkede med flere conn.Execute, dog kan jeg ikke lige se hvad du mener med loops i Insert sætnignen sth?
Men anyways, eftersom både ksoren's og arne_v's kommentar hjalp mig videre, vil jeg da gerne dele pointene imellem jer :)
Takker for hjælpen.
Avatar billede arne_v Ekspert
20. maj 2005 - 18:39 #6
så ligger jeg et svar

husk og vent på ksoren
Avatar billede sth Novice
21. maj 2005 - 23:58 #7
jeg regnede bare med at du ville hente en del data fra en anden tabel og så indsætte dem i din "TEMPORARY TABLE tmp " og dermed skulle du jo rulle igennem den tabel hvorfra du hentede data
altså noget i stil med
SQLstmt ="SELECT * FROM en eller anden tabel"
Conn.Execute (SQLstmt)
Set rs = conn.Execute(SQLstmt)
DO WHILE NOT rs.EOF
    felt_1    = rs("felt_1")
    felt_1    = rs("felt_1")


                SQLstmt = "INSERT INTO "& temp_tabel_navn &" (fel_1, fel_2)"
                SQLstmt = SQLstmt & " VALUES ('" & fel_1  & "','" & fel_2  & "')"
                Conn.Execute (SQLstmt)
       

wend
Avatar billede killerviruz Nybegynder
22. maj 2005 - 00:10 #8
Nåååh, nej det er ikke nødvændigt, det klarer MySQL for mig :)
Avatar billede sth Novice
24. maj 2005 - 21:03 #9
hmmm ja ok du opretter en tabel med
CREATE TEMPORARY TABLE tmp (
        Comments  INT(4) DEFAULT NULL,
    UserID    INT(4) DEFAULT NULL);
og så smider data ind med din

INSERT INTO tmp
(SELECT COUNT(CommentID) AS Comments, CommentUserID AS UserID FROM newscomments GROUP BY CommentUserID)
UNION
(SELECT COUNT(PhotoCommentID), PhotoCommentUserID FROM photocomments GROUP BY PhotoCommentUserID)
ORDER BY UserID;


Det var jeg jo ikke klar over at man kunne men hvilken type tabel bliver TEMPORARY TABLE  ?

Ok hvor hurtig slettes den igen ?
Avatar billede arne_v Ekspert
24. maj 2005 - 21:08 #10
du kan selv angive MyISAM eller InnodDB som du har lyst til

den slettes når connection closes
Avatar billede arne_v Ekspert
28. maj 2005 - 16:21 #11
killerviruz ?
Avatar billede arne_v Ekspert
24. juli 2005 - 17:09 #12
??
Avatar billede killerviruz Nybegynder
24. juli 2005 - 18:34 #13
Hmm... lader ikke til at ksoren vil have sine point, så du får dem bare arne :)
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
Computerworld tilbyder specialiserede kurser i database-management

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