Jeg har en statistik løsning som nu kører på en access database! denne løsning skal dog nu over på et webhotel som kører på en mysql database!
Mit problem er så at de forespørgsler som jeg har lavet i ms access nu skal skrives ind i sql sætningen på mine asp sider! Og jeg fatter ikke at skrive dem så mysql forstår dem!
Jeg har spurt om dette før men det virker ikke til at nogle gider hjælpe for points, derfor vil jeg gerne give både 100 points samt kr. 100.- til den der gider omskrive dem for mig! det drejer sig om 13 forespørgsler!
De ser ud som nedenstående en enkelt er dog lidt længere: -------------------------------------------------------- SELECT DISTINCTROW countlog.IP AS Udtryk1, Count(*) AS nrofcount, [Nrofcount]/((Select count(*) from [countlog])/100) AS pct FROM countlog GROUP BY countlog.IP;
Hvis nogle sql eksperter er intereseret så send en mail til mig og jeg sender jer access databasen!
min mail er: steinmetz@city.dk
Hvis nogle laver en løsning, paster jeg selvfølgelig den nye løsning ind her på eksperten, således andre kan se hvorledes den er blivet ændret!!
Jeg vil gerne se din database. Nu ved jeg ikke hvor stor den er, men hvis den fylder mere end 10MB, må du hellere lægge den på en server, så henter jeg den der :)
Det ser umiddelbart ikke helt håbløst ud - men lad mig lige se på den først :) ps. samme besked er sendt pr. mail!
Hvilken version af MySQL bruger du? Jeg kan se at du bruger subselects i Access, men det er noget MySQL først giver mulighed for fra version 4.1!!! Kilde: http://www.mysql.com/press/release_2003_05.html
Jeg venter med at oversætte til du har givet mig versionsnummeret :)
Hmm... jeg har ikke prøvet min løsning med version 3.23 ... kun med version 4.1.0-alpha :)
Følgende forespørgsel er oversat fra:
Access-SQL: ------------- SELECT DISTINCTROW countlog.Browser, Count(*) AS nrofcount, [Nrofcount]/((Select count(*) from [countlog])/100) AS pct FROM countlog GROUP BY countlog.Browser; -------------
Til:
MySQL-SQL ------------- SET @var1 = ((SELECT COUNT(*) FROM countlog) / 100); SELECT countlog.Browser, (Count(*) / @var1) AS pct FROM countlog GROUP BY countlog.Browser; -------------
Forespørgslen hedder browsersF i din Access-database :) Prøv om det virker, det gjorde det ihvertfald her...
Resten oversætter jeg, når du har prøvet den forespørgsel her...
NB! Jeg har faktisk oversat din forespørgsel til to (2!) forespørgsler adskilt af ";".
Hvis du ikke har migreret data fra din access-database til din mysql-database endnu, så har jeg dumpet dine 2 tabeller til 2 sql-filer, som jeg kan maile til dig.
Dem skal du så bare importere i din MySQL-database.
Jeg tror at det du har lavet i Access svarer meget til det man kan lave på denne måde i MySQL, hvor vi først opretter en midlertidig tabel:
CREATE TABLE test TYPE=HEAP SELECT countlog.Browser,COUNT(*) AS nrofcount FROM countlog GROUP BY countlog.Browser;
Og dernæst kan vi søge i den tabel:
SELECT test.Browser, (nrofcount / (SELECT COUNT(*) FROM countlog) *100) AS pct FROM test;
Denne metode giver en bedre perfomance en den tidligere foreslåede, men jeg har aldrig prøvet at arbejde rigtigt med den, så jeg tør ikke helt stå inde for den.
Til sammenligning tager den først foreslåede løsning ca. 0.30 sek at eksekvere, mens den anden blot tager 0.01 sek, når først HEAP-tabellen er oprettet ...
Databasen ligger allerede som mysql så det skulle være iorden!
jeg har smidt mysql koden ind på en side men den kommer med følgende fejl!
ADODB.Recordset.1 error '80004005'
SQLState: 42000 Native Error Code: 1064 [TCX][MyODBC]You have an error in your SQL syntax near 'SELECT COUNT(*) FROM countlog) / 100); SELECT countlog.Browser, (Count(*) / @var' at line 1
/tester/test.asp, line 27
Jeg har sat den således ind!
<% Dim browsers Dim browsers_numRows
Set browsers = Server.CreateObject("ADODB.Recordset") browsers.ActiveConnection = MM_counter_STRING browsers.Source = "SET @var1 = ((SELECT COUNT(*) FROM countlog) / 100); SELECT countlog.Browser, (Count(*) / @var1) AS pct FROM countlog GROUP BY countlog.Browser;" browsers.CursorType = 0 browsers.CursorLocation = 2 browsers.LockType = 1 browsers.Open()
Jeg er ikke så stærk i ASP... Det er meget lang tid siden jeg har brugt det. Holder mig til PHP nu :) Men jeg har lige prøvet begge mine løsninger på en MySQL version 3.23.58 og der virkede ingen af dem.
Grunden til at du får en fejl er højst tænkeligt at vi anvender Subselects, altså SELECT i SELECT.
Jeg tror heller ikke at 3.23 kan udføre flere sætninger på en gang.
Har du mulighed for at opgradere til en nyere version - helst 4.1 ?
Ellers er jeg bange for at det slet ikke er muligt at bruge mysql :(
Jeg har lige hørt dem nu! og det er ikke muligt at opgradere fra 3.23! det burde da kunne lade sig gøre eller va???
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.