Avatar billede tblaster Nybegynder
30. august 2005 - 12:24 Der 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"
Avatar billede fennec Nybegynder
30. august 2005 - 12:26 #1
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"
Avatar billede tblaster Nybegynder
30. august 2005 - 12:30 #2
Fik vist ikke lige nænt at det er vigtigt at udtrækket henter 20 tilfældige poster ud og så sorter dem efter højeste antal point.
Avatar billede drean Nybegynder
30. august 2005 - 12:31 #3
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"

måske?
Avatar billede tblaster Nybegynder
30. august 2005 - 12:36 #4
Nope ... det henter 20 tilfældige poster ud som ikke sorteres efter point.
Avatar billede fennec Nybegynder
30. august 2005 - 12:41 #5
Hvilken version af MySQL bruger du???
Avatar billede drean Nybegynder
30. august 2005 - 12:41 #6
prøv "...RAND(), Point.." istedet.
Avatar billede fennec Nybegynder
30. august 2005 - 12:46 #7
Det du skal over i er noget i denne stil:

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)
Avatar billede tblaster Nybegynder
30. august 2005 - 12:50 #8
Det giver det samme. Har også prøvet at sorter efter D.ID hvilket heller ikke virker.

Jeg køre på en MySQL 4.1.9
Avatar billede tblaster Nybegynder
30. august 2005 - 12:53 #9
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
Avatar billede fennec Nybegynder
30. august 2005 - 13:00 #10
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)"
Avatar billede tblaster Nybegynder
30. august 2005 - 13:11 #11
Det giver:
#1248 - Every derived table must have its own alias
Avatar billede fennec Nybegynder
30. august 2005 - 13:58 #12
Der skal lige et alias på:
"select navn from (select navn from bruger) as TmpTable"
Avatar billede tblaster Nybegynder
30. august 2005 - 14:05 #13
Yep det kan jeg godt!
Avatar billede fennec Nybegynder
30. august 2005 - 14:10 #14
Hvad så med:
select * from (SELECT D.Tekst, D.ID, D.Score/D.Stemmer as Point FROM Data D) as TmpTable
Avatar billede tblaster Nybegynder
30. august 2005 - 14:21 #15
Det virker også!
Avatar billede fennec Nybegynder
30. august 2005 - 14:32 #16
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"
Avatar billede tblaster Nybegynder
30. august 2005 - 14:37 #17
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
Avatar billede fennec Nybegynder
30. august 2005 - 14:44 #18
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"
Avatar billede tblaster Nybegynder
30. august 2005 - 14:49 #19
Det køre også!
Avatar billede fennec Nybegynder
30. august 2005 - 14:56 #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 D.ParentID = 0
  Order By RAND()
  Limit 20) as tmpTable
order by Point"
Avatar billede tblaster Nybegynder
30. august 2005 - 15:01 #21
Yep den høre også.
Avatar billede fennec Nybegynder
30. august 2005 - 15:04 #22
"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"
Avatar billede tblaster Nybegynder
30. august 2005 - 15:10 #23
Det ser også ud til at virke! Så er den vel hjemme?

(høre = køre) :-)
Avatar billede tblaster Nybegynder
30. august 2005 - 15:12 #24
Der mangler bare lige delen med:
CHAR_LENGTH(D.Tekst) < " & MsgLength  &"
Avatar billede fennec Nybegynder
30. august 2005 - 15:17 #25
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"
Avatar billede tblaster Nybegynder
30. august 2005 - 15:22 #26
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
Avatar billede fennec Nybegynder
30. august 2005 - 15:32 #27
Prøv med LENGTH(D.Tekst) i stedet for CHAR_LENGTH(D.Tekst)
Avatar billede tblaster Nybegynder
30. august 2005 - 15:36 #28
Det hjalp. Så lader det til at det virker. Smid endelig et svar og mange tak for hjælpen!
Avatar billede fennec Nybegynder
30. august 2005 - 15:41 #29
.o) <-- One Eyed Jack
Avatar billede tblaster Nybegynder
04. september 2005 - 11:49 #30
fennec ... kan du også hjælpe her:
http://www.eksperten.dk/spm/645181
Avatar billede tblaster Nybegynder
21. september 2005 - 18:26 #31
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

Kan du se hvad der er galt?
Avatar billede fennec Nybegynder
26. september 2005 - 08:42 #32
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).
Avatar billede tblaster Nybegynder
26. september 2005 - 17:48 #33
Takker for din kommentar ... jeg må se om jeg kan finde en løsninge på det hele.
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
Kurser inden for grundlæggende programmering

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