30. august 2005 - 12:24Der er
32 kommentarer og 1 løsning
Sql udtræk skal sorter efter højeste Point.
Jeg har en sql streng jeg gerne skal have til at sorter efter højeste Point. Er der nogen der kan hjælpe med det?
Sql = "SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By RAND() Limit 20"
Sql = "SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By Point desc Limit 20"
eller: Sql = "SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By D.Score/D.Stemmer desc Limit 20"
Sql = "SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By RAND(), D.Score Limit 20"
select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By RAND() Limit 20) order by Point
Men ældre versioner af MySQL understøtter IKKE dette. Er ikke engang sikker på at de nye gør, men prøv det :o)
Fennec ... det er sådan noget jeg nok ledte efter men har aldrig selv fundt ud af hvordan det skal stykkes sammen.
Det giver mig følgende fejl: #1064 - 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 '( D . Tekst ) < 160 and ( D . ParentID = 0 Or D . ParentID = 13 Or D . ParentID ' at line 1
Lige netop MySQL har problemer med hvad jeg kalder "inner select". Ved ikke hvad det rigtige navn er, men det er først i version 5 hvor de rigtig har fået gjort noget ved det. Nogle metoder er dog mulige i version 4, så vi skal have forsøgt os lidt frem først.
Kan du kave dette på en tabel: "select navn from (select navn from bruger)"
Så er vi kommet til denne: "select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 ) Order By RAND() Limit 20) as tmpTable order by Point"
Det giver følgende fejl: #1064 - 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 '( D . Tekst ) < 160 and ( D . ParentID = 0 ) Order By RAND( ) Limit 20 ) as tmpT' at line 1
Der sprang vi nok lidt for langt :o) "select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where D.ParentID = 0 ) as tmpTable order by Point"
"select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where D.ParentID = 0 Order By RAND() Limit 20) as tmpTable order by Point"
"select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and D.ParentID = 0 Order By RAND() Limit 20) as tmpTable order by Point"
Ja, og det lader til at problemer et der. Nu er vi tilbage til den fra "14:32:32" og der var fejl i. Ikke??
"select * from ( SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.Nr <>'" & RQ_origin & "') and CHAR_LENGTH(D.Tekst) < " & MsgLength &" and D.ParentID = 0 Order By RAND() Limit 20) as tmpTable order by Point"
Jo ... det giver følgende fejl lige meget hvad jeg prøver: #1064 - 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 '( D . Tekst ) < 160 and ( D . ParentID = 0 Or D . ParentID = 13 Or D . ParentID ' at line 1
Hey du ... nu har jeg kørt med sql'en et stykke tid, og den trækker stadig poster ud som har været sendt til det givet nr før. Min sql er endt som føglnede:
SELECT* from (SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D LEFT JOIN log S ON D.ID = S.DataID Where (S.DataID IS NULL or S.nr <>'" & RQ_nr & "') and LENGTH(D.Tekst) < " & MsgLength &" and (D.ParentID = 0 " & Replace(FindIDer(13), "ParentID", "D.ParentID") & ") Order By RAND() Limit 50) as tmpTable order by Point desc
Undskyld det sene svar, men jag har været syg hele sidste uge :(
Kan se du har oprette et nyt ? og at der ikke er kommet nogen løsning endnu, så jeg ville bare sige at jeg desværre heller ikke kan se problemet i SQL'en.
Mit bud er at det er dine data/tabel opbygning der skaber problemet. For at tjekke om det er her problemet er, skal jeg have adgang til din database. Afhængig af hvor meget data du har, er det en størrere operation, da jeg skal krystjekke alle data manuelt, og det har jeg ikke tid til på nuværende tidspunkt, da jeg er en uge bagefter med arbejde (pga min sygdom).
Takker for din kommentar ... jeg må se om jeg kan finde en løsninge på det hele.
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.