Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 21:08 Der er 11 kommentarer og
1 løsning

SQL sætning fejl

Virker til access db, men ikke til mysql - hvorfor?

select * From Gæst where id2 in (select * id2 from Gæst where id = " & request("id5") & " order by id2 desc limit 0,10) order by id2 asc

er det IN den ikke kan klare?
Avatar billede keysersoze Ekspert
22. august 2002 - 21:11 #1
fordi mysql ikke kan finde ud af at lave en select inde i en select
Avatar billede htm Nybegynder
22. august 2002 - 21:12 #2
Måske skal du lade være med at bruge danske karakterer, som databasenavn (æøå)!
Avatar billede neteffect Nybegynder
22. august 2002 - 21:14 #3
* id2 ser underlilgt ud. Tabelnavn med æ er asking for trouble.

limit 0,10 er vist ikke så indarbejdet som standard som SELECT TOP 10
... som i hvertfald er mere læseligt.

Her er et link til en SQL-validator:

http://developer.mimer.se/validator/
Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 21:14 #4
Keyseroze:
Kan du finde ud af at lave en sætning der gør det samme, men som mysql også kan tolke?

htm:
Man kan godt benytte danske karakterer
Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 21:19 #5
meteffect:
ja der er en stjerne der skal fjernes

select * From Gæst where id2 in (select id2 from Gæst where id = " & request("id5") & " order by id2 desc limit 0,10) order by id2 asc

Det er netop Top 10 jeg har lavet om til Limit 0,10 - havde åbenbart lavet en stjerne der. Limit virker fint i mysql.
Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 21:27 #6
..fortsat, men det hjælper ikke på fejlen af fjerne den *.

Håber der er en der kan konvertere den til mysql.
Avatar billede morw Nybegynder
22. august 2002 - 21:29 #7
subselects understøttes ikke, men forklar lige på dansk hvad du vil, og en JOIN kan laves
Avatar billede keysersoze Ekspert
22. august 2002 - 21:30 #8
jeg gider ikke lave dit om - men jeg kan give et eksempel jeg tidligere selv har brugt;

Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={mysql};SERVER=" & application("db_server") & ";DATABASE=" & application("db") & ";UID=" & application("db_uid") & ";PWD=" & application("db_pwd") & ";"
    SQL2 = "SELECT tekstid FROM forumsvar WHERE tekst LIKE '%" & keyword & "%'"
    Set rs2 = conn.Execute(SQL2)
   
    If (rs2.BOF AND rs2.EOF) Then
    svar = 0
    else
    Do while not rs2.eof
    svar = rs2("tekstid")
    rs2.movenext
    if not rs2.eof then svar = svar & " OR "
    loop
    end if
   
    SQL = "SELECT DISTINCTROW id, titel, laest FROM forumtekst WHERE titel LIKE '%" & Keyword & "%' OR tekst LIKE '%" & Keyword & "%' OR id = '" & svar & "' LIMIT " & start & ", 14"
    Set rs = conn.Execute(SQL)
Avatar billede morw Nybegynder
22. august 2002 - 21:35 #9
Måske noget ala

SELECT G2.*
FROM Gæst as G1
LEFT JOIN Gæst as G2 On G2.id = G1.id2
order by G1.id2 desc, G2.id2
limit 0,10
Avatar billede jangravgaard Nybegynder
22. august 2002 - 21:45 #10
jeg tror du kan få lidt inspiration her :
http://www.mysql.com/doc/en/ANSI_diff_Sub-selects.html
Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 22:38 #11
Morw:
Jeg prøver at forklare. Jeg ønsker de seneste 10 records (id2 er autonr.) hvor id er lig med id5.

Dvs hvis der fandtes noget der hed Bottom ville det se sådanne ud:
select bottom * from Gæst where id = " & request("id5") & " order by id2 asc

Jeg kender ikke så meget til join, så din sætning kan jeg ikke helt gennemskue.

Jang:
tak - jeg prøver at kigge på det
Avatar billede 3dmaxer.dk Nybegynder
22. august 2002 - 23:19 #12
Lav har lavet et alternativ. Jeg har inkluderet count(*) og trækker 10 fra det. Derefter bruger jeg Limit tal,-1 til at hente de sidste 10 records.

Så problemet er løst.
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