Avatar billede tblaster Nybegynder
01. marts 2007 - 17:30 Der er 12 kommentarer og
1 løsning

Mysql udtræk melder fejl

Jeg får en fejl i mit sql udtræk:

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

[MySQL][ODBC 3.51 Driver][mysqld-4.0.26]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 D.Url, D.navn, D.(

Sql:
SELECT * from (SELECT D.Url, D.navn, D.Tekst, D.ID, D.Score, D.Stemmer FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN mail_log L ON D.ID = L.DataID Where L.DataID IS NULL and (D.Sprog like '%DK%' or D.Sprog = 'All') and Censur = 0 and (ParentID = 0 Or ParentID=14)Order by rand() limit 50) as temptabel Order By Score/Stemmer desc

Serverversion: 4.0.26
Avatar billede hewa Nybegynder
01. marts 2007 - 21:31 #1
(SELECT * from D.Url, D.navn, D.Tekst, D.ID, D.Score, D.Stemmer FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN mail_log L ON D.ID = L.DataID Where L.DataID IS NULL and (D.Sprog like '%DK%' or D.Sprog = 'All') and Censur = 0 and (ParentID = 0 Or ParentID=14)Order by rand() limit 50 as temptabel Order By Score/Stemmer desc)
Avatar billede tblaster Nybegynder
02. marts 2007 - 15:38 #2
Det giver:
[MySQL][ODBC 3.51 Driver][mysqld-4.0.26]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 'as temptabel Order By Sc(
Avatar billede hewa Nybegynder
02. marts 2007 - 16:27 #3
Jamen hvad dækker denne over, as temptabel?
- hvis du fjerner den, bør du være kørende...
Avatar billede tblaster Nybegynder
02. marts 2007 - 17:05 #4
Her er en forklaring til min sql:
Jeg skal have trukket en række poster ud fra DATA tabellen men posten må ikke eksister under MAIL_LOG tabellen. Posterne skal trækkes ud efter nogle krav og først sorteres tilfældigt hvorefter de 50 udtrukne poster skal sorteres efter SCORE/STEMMER. Og der er derfor at der bruges en temptabel idet at posterne første trækkes ud og sorteres tilfældigt hvorefter disse poster (som så er i temptabel) sorteres efter score/stemmer.

Det kan nævnes at koden virkede fint op imod mysql 5.0 men jeg måtte flytte til en mysql 4.0 så der må være en forkel i hvordan databasen accepter en sådan udførelse!
Avatar billede hewa Nybegynder
02. marts 2007 - 19:52 #5
Skal den så ikke se sådan ud:
(SELECT as temptabel * from D.Url, D.navn, D.Tekst, D.ID, D.Score, D.Stemmer FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN mail_log L ON D.ID = L.DataID Where L.DataID IS NULL and (D.Sprog like '%DK%' or D.Sprog = 'All') and Censur = 0 and (ParentID = 0 Or ParentID=14)Order by rand() limit 50 Order By Score/Stemmer desc)
Avatar billede tblaster Nybegynder
02. marts 2007 - 20:35 #6
Det giver fejl igen men følgende skal jo også gå galt: ... from D.Url ... Der skal vel selectes på en tabel!
Avatar billede hewa Nybegynder
02. marts 2007 - 23:44 #7
Men hvis du fjerner 'as temptabel', har det vel også den effekt du ønsker?
Avatar billede tblaster Nybegynder
03. marts 2007 - 12:26 #8
Hvis jeg nøjes med at fjerne det får jeg stadig samme fejl. Her er den sql jeg bruger:
Sql0 = "SELECT * from (SELECT D.Url, D.navn, D.Tekst, D.ID, D.Score, D.Stemmer FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN mail_log L ON D.ID = L.DataID Where L.DataID IS NULL and (D.Sprog like '%" & Lang & "%' or D.Sprog = 'All') and Censur = 0 and [ParentID] Order by rand() limit 50) Order By Score/Stemmer desc"

Hvis jeg tilgengæld bruger følgende sql så får jeg ingen fejl:
Sql0 = "SELECT D.Url, D.navn, D.Tekst, D.ID, D.Score, D.Stemmer FROM (Data as D JOIN dataXkategori as dXk ON D.ID = dXk.DID) LEFT JOIN mail_log L ON D.ID = L.DataID Where L.DataID IS NULL and (D.Sprog like '%" & Lang & "%' or D.Sprog = 'All') and Censur = 0 and [ParentID] Order by rand(), Score/Stemmer desc"

Men problemet med ovenstående sql er at den returner 50 tilfældige poster sorteret tilfældigt. Jeg skal have trukket 50 tilfældige poster ud og disse 50 poster skal jeg have sorteret efter Score/Stemmer og det var derfor jeg benyttede en temptabel!
Avatar billede hewa Nybegynder
03. marts 2007 - 16:00 #9
Okay, jeg give op, jeg har lige brugt et par timer på det og jeg har prøvet alverdens krumspring, men enten kommer de altid i samme rækkefølge eller også bliver rand() dannet over dem alle...

Held og lykke med projektet :)
Avatar billede tblaster Nybegynder
03. marts 2007 - 16:14 #10
Tak for hjælpen alligevel. Må håbe der evt. er en anden der kan hjælpe!
Avatar billede tblaster Nybegynder
15. august 2007 - 12:34 #11
Det er vist lukketid. Hewa, smid et svar og du skal få point for din hjælp.
Avatar billede hewa Nybegynder
16. august 2007 - 08:18 #12
Desværre kunne jeg ikke hjælpe dig, så du skal beholde pointene :)
Avatar billede tblaster Nybegynder
16. august 2007 - 09:44 #13
Lukker.
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