Avatar billede bentbent Nybegynder
18. november 2003 - 18:28 Der er 14 kommentarer

MS access forespørgsel til mysql

Hejsa Eksperter!

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!!
Avatar billede sn0wflake Nybegynder
18. november 2003 - 18:33 #1
Jeg glæder mig til at se en ren SQL løsning :)
Avatar billede bentbent Nybegynder
18. november 2003 - 18:37 #2
Det er måske ikke så godt formuleret! det er blot select sætningerne jeg skal bruge!

Løsningen er skrevet i ASP

"SELECT * FROM countdays WHERE nrdays ........."
Avatar billede sn0wflake Nybegynder
18. november 2003 - 18:49 #3
Dit spørgsmål er udmærket formuleret. SQL'en er bare avanceret, men der findes sikkert et klogt hoved derude der kan knække nødden.
Avatar billede muddi Praktikant
21. november 2003 - 16:01 #4
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!

/Muddi
Avatar billede muddi Praktikant
22. november 2003 - 13:40 #5
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 :)

/Muddi
Avatar billede bentbent Nybegynder
22. november 2003 - 19:25 #6
Hej Muddi!

jeg har lige fundet ud af at der er version 3.23 mysql som er installeret!
Håber det kan lade sig gøre!!
Avatar billede muddi Praktikant
22. november 2003 - 23:03 #7
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 ";".

/Muddi
Avatar billede muddi Praktikant
22. november 2003 - 23:08 #8
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.
Avatar billede muddi Praktikant
23. november 2003 - 15:16 #9
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 ...
Avatar billede bentbent Nybegynder
23. november 2003 - 15:25 #10
Hejsa muddi!

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()

browsers_numRows = 0
%>
Avatar billede bentbent Nybegynder
23. november 2003 - 15:27 #11
Hvorledes skulle det skrives hvis man brugte CREATE TABLE det virker som en god løsning!
Avatar billede muddi Praktikant
23. november 2003 - 15:56 #12
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 :(
Avatar billede bentbent Nybegynder
23. november 2003 - 18:36 #13
jeg tror desværre ikke det kan opgraderes, da det er en amerikansk udbyder! tera-byte.com jeg vil dog lig prøve at høre dem imorgen!!
Avatar billede bentbent Nybegynder
23. november 2003 - 18:44 #14
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???
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