19. maj 2005 - 13:36Der 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:
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.
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.
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")
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 ?
Hmm... lader ikke til at ksoren vil have sine point, så du får dem bare arne :)
Synes godt om
Ny brugerNybegynder
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.