Avatar billede trumf Nybegynder
15. august 2003 - 09:38 Der er 16 kommentarer og
1 løsning

SELECT IN fra mySQL 4.0.14

Hejsa eksperter

Jeg har lige fået mig en ny DB og det er jo mySQL. Jeg har indtil nu kørt med Access DB. Jeg får nu en SQLfejl som jeg ikke lige kan gennemskue:

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[MySQL][ODBC 3.51 Driver][mysqld-4.0.14-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 'SELECT vinID FROM karakterer WHERE (stat = 3 OR stat = 2) AND b

/include/vinlisten.asp, line 6

SQL'en ser således ud:
SELECT COUNT(vinID) AS antalRes FROM vin WHERE anmeldt >= " & cLng(cDate(date)-28) & " AND (vinID) IN (SELECT vinID FROM karakterer WHERE (stat = 3 OR stat = 2) AND beskrivelse <> '')

Jeg har på fornemmelsen at det er "IN" der er synderen, men hvad kan man bruge i stedet ?
Avatar billede erikjacobsen Ekspert
15. august 2003 - 09:45 #1
Man kan ofte bruge en join.

sql = "select count(vinID) AS antalRes FROM vin,karakterer where vin.vinID=karakterer.vinID AND vin.anmeldt >= " & cLng(cDate(date)-28) & " AND karakterer.stat in (3,2) AND karakterer.beskrivelse<>'' "

....vistnok
Avatar billede trumf Nybegynder
15. august 2003 - 10:09 #2
Jeg har nu lavet det om til dette men det giver ikke nogen resultater!

Select COUNT(vin.vinID) AS antalRes FROM vin, karakterer WHERE vin.vinID=karakterer.vinID AND vin.anmeldt >= " & cLng(cDate(date)-28) & " AND (karakterer.stat = 3 OR karakterer.stat = 2) AND karakterer.beskrivelse <> '' AND vin.vinID = karakterer.vinID
Avatar billede erikjacobsen Ekspert
15. august 2003 - 10:26 #3
Giver den 0 altid?

Du kan droppe den sidste    AND vin.vinID = karakterer.vinID
Der er ingen grund til at udregne den 2 gange
Avatar billede trumf Nybegynder
15. august 2003 - 10:39 #4
Ja, nu giver den kun 0, men det gør den ikke med den oprindelige SQL der kobler op mod Access!
Avatar billede trumf Nybegynder
15. august 2003 - 10:45 #5
Kan det ikke være datoformatet cLng(cDate(date)-28) som er anderledes i mySQL end Access ???
Avatar billede trumf Nybegynder
15. august 2003 - 11:12 #6
Når jeg fjerner clong kommer alle resultaterne, også dem før den angivne dato!
Avatar billede erikjacobsen Ekspert
15. august 2003 - 12:21 #7
Hvad er din felttype anmeldt? Og hvad står der i den?
Avatar billede trumf Nybegynder
15. august 2003 - 12:23 #8
Dette virker:

datoStr1 = Year(dato1) & "-" & Month(dato1) & "-" & Day(dato1)
SQLStr = "Select COUNT(vin.vinID) AS antalRes FROM vin, karakterer WHERE vin.vinID = karakterer.vinID AND vin.anmeldt >= '" & datoStr1 & "' AND karakterer.stat IN (2,3) AND karakterer.beskrivelse <> ''"

Smider du et svar Erik ?
Avatar billede trumf Nybegynder
15. august 2003 - 12:24 #9
felttype er datetime!
Avatar billede erikjacobsen Ekspert
15. august 2003 - 12:27 #10
Så er clng nok ikke så godt ;)  En clng(date)  giver vist antal dage siden
1970, mens datetime viser datoen som fx  20030814. Du kan vælge at gøre
dit felt til en INT, og bevare clng... eller lave i ASP/VB datoen som
20030814 i stedet for.
Avatar billede erikjacobsen Ekspert
15. august 2003 - 12:29 #11
...antal dage siden 1900 ;)
Avatar billede erikjacobsen Ekspert
15. august 2003 - 12:31 #12
Ja, det er den "rigtige" løsning af 2 du har anført. Den anden er
at lave 20030814 i stedet for 2003-8-14, men så skal man rode med
foranstillede 0-er.
Avatar billede trumf Nybegynder
15. august 2003 - 12:37 #13
For dælen der bliver meget der skal laves om...

Takker :-)
Avatar billede trumf Nybegynder
15. august 2003 - 12:38 #14
Men det kører da nu på www.emlopen.dk og det kører dælme hurtigt!
Avatar billede erikjacobsen Ekspert
15. august 2003 - 12:42 #15
Vi kunne ikke bytte nogle point for et par vareprøver ? *g*
Men fint med linket, det er faktisk rart at se at det lidt hjælp
man kan give her, faktisk bliver brugt til noget fornuftigt!
Avatar billede trumf Nybegynder
15. august 2003 - 12:51 #16
Du kan se forskellen hvis du går ind på www.vinguide.com for den kører stadig på Access, men du skal ikke oprette dig som bruger før i morgen, da jeg ikke ved hvordan jeg henter nye poster ind i DB som allerede er importeret
Avatar billede trumf Nybegynder
15. august 2003 - 12:55 #17
Jeg mener selvfølgelig ikke at du skal oprette dig, jeg mener bare at det stort set kun er forsiden der virker ;-)
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