01. marts 2007 - 17:30Der 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
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
(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)
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(
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!
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)
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!
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...
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.