Avatar billede reino Nybegynder
21. juni 2005 - 08:57 Der er 12 kommentarer og
1 løsning

select top med unik id

Hejsa

Har et problem, har flg. query:

set rs=db.execute("SELECT top 3 * from test where aid=48 and notify<>'ja' ORDER BY test ASC")

Lad os sige jeg har 10 poster, 4 af dem har aid=48, 2 andre har aid 47 etc. Hvordan sikrer jeg mig at det query vælger den samme post med samme aid, såfremt jeg ikke benytter: where aid=48. Grunden dertil er at scriptet skal køres dynamiskt hver 10 min.
Avatar billede -thomas- Nybegynder
21. juni 2005 - 09:00 #1
Jeg er ikke helt sikker på hvad du vil. Vil du hente dem med det højeste aid? Så kan du fx. bruge en subquery:

SELECT * FROM test WHERE aid = (SELECT MAX(aid) FROM test) AND notify <> 'ja' ORDER BY test ASC
Avatar billede busschou Praktikant
21. juni 2005 - 09:03 #2
du vil have den vælger samme aid=48 uden brug af where?? Det er ikke muligt, for den skal jo vide at den netop skal vælge dem hvor (where) aid=48 ;o)
Avatar billede busschou Praktikant
21. juni 2005 - 09:04 #3
hvis du blot ønsker dem sorteret på aid kan den jo gå med i din order by, men jeg er heller ikke helt sikker på hvad du ønsker?
set rs=db.execute("SELECT top 3 * from test where notify<>'ja' ORDER BY aid ASC, test ASC")
Avatar billede reino Nybegynder
21. juni 2005 - 10:13 #4
Hejsa

Tak for hurtig response. Det er et lille auktionssystem jeg har lavet, databasen består af 2 tabeller, 1 tabel med leverandører (lev), 2 tabel med bud (bud). Det som jeg ønsker er et script der kører hver 5. minut som tjekker de forskellige sager, dvs. om disse er udløbet eller ej. Lige nu har jeg lavet det manuelt fra et simpelt admininterface, dvs man skal hele tiden tjekke for om nogle af sagerne er udløbet, dette ønsker jeg blot automatiseret istedet for, beklager mit uklare spørgsmål til at starte med. Det script som jeg pt bruger er:

<%
tag=request.querystring("id")
session.lcid=1030
nydato=date-30
set rs=db.execute("SELECT top 3 * from bud where sagsnummer=" & tag & " ORDER BY bud ASC")
if rs.eof then
else
set rs1=db.execute("SELECT * from lev where id=" & rs("sagsnummer") & "")

Set jmail = Server.CreateObject("JMail.Message")


jmail.AddRecipient rs1("email"), rs1("navn")
jmail.From = "system"
jmail.Logging = true
jmail.silent = true
jmail.Subject = "Resultat af auktionsnummer " & rs("sagsnummer")
jmail.Body = "Mail"


jmail.HTMLBody = "<html><body><font face=""arial"" color=""#666666"" size=""2"">Kære " &  rs1("navn")

jmail.appendHTML "<br><br>Auktionen på jobnummer " & rs("sagsnummer") & " er nu afsluttet<br><br>Forneden kan du se de bedste bud på din forespørgsel<br><br>Kontaktinfo på de 3 bedste leverandører er:<br><br>"
Do Until RS.EOF

jmail.appendHTML "<b>" & rs("firmanavn") & "</b><br>"
jmail.appendHTML rs("adresse") & "<br>"
jmail.appendHTML rs("postnum") & "<br>"
jmail.appendHTML rs("telefon") & "<br>"
jmail.appendHTML rs("email") & "<br>"
jmail.appendHTML "<b>Bud: DKK: " & rs("bud") & ",00</b><br><br>"
RS.MoveNext
        Loop
jmail.appendHTML "<br><br> Med venlig hilsen</font></body></html>"
jmail.Body = "Din emailklient understøtter desværre ikke HTML"
jmail.appendText "Din emailklient understøtter desværre ikke HTML"

jmail.Send( "smtp" )

set rs2=db.execute("update bud set notify='ja' where sagsnummer=" & tag & "")
end if
                %>
Afslutningsmail er nu blevet sendt


Jeg forhøjer gerne points såfremt nogle kan hjælpe :)
Avatar billede -thomas- Nybegynder
21. juni 2005 - 18:09 #5
En noget rodet kode du har fået lavet..

Kan du ikke prøve at forklare lidt nærmere, hvad det er du vil opnå?

Hvad bruger du fx. nydato=date-30 til?

Vil du sende en mail ud til leverandøren, hvis der er minimum 3 der har budt på en vare?
Avatar billede reino Nybegynder
22. juni 2005 - 00:11 #6
hejsa, den nydato var blot til noget testformål

Det jeg ønsker er at systemet sender en mail til 3 laveste bud på en sag med samme sagsnummer. Så jeg skal have systemet til at vælge en sag med samme sagsnummer, aka 3 laveste bud sorteret på samme sagsnummer
Avatar billede -thomas- Nybegynder
22. juni 2005 - 16:05 #7
Hvorfor er de tre laveste bud de bedste?
Avatar billede -thomas- Nybegynder
22. juni 2005 - 16:10 #8
Jeg har prøvet at rydde lidt op i din kode. Husk at tjekke tag for sql-injections. Bør den ikke sende mailen med de tre højeste bud? Jeg har sat den til kun at sende, hvis der er minimum tre bud - ved ikke om det er det du ønsker.

tag = Request.Querystring("id")
Session.LCID = 1030

Set rs = db.Execute("SELECT COUNT(*) AS cnt FROM bud WHERE sagsnummer = " & tag & " ORDER BY bud ASC")
If Not rs.Eof Then
    If rs("cnt") >= 3 Then
        Set rs1 = db.Execute("SELECT * FROM lev WHERE sagsnummer = " & tag)
        If Not rs1.Eof Then
       
            Set jmail = Server.CreateObject("JMail.Message")
           
            jmail.AddRecipient rs1("email"), rs1("navn")
            jmail.From = "system"
            jmail.Logging = true
            jmail.silent = true
            jmail.Subject = "Resultat af auktionsnummer " & rs("sagsnummer")
            jmail.Body = "Mail"
            jmail.HTMLBody = "<html><body><font face=""arial"" color=""#666666"" size=""2"">Kære " &  rs1("navn")
           
            jmail.appendHTML "<br><br>Auktionen på jobnummer " & rs("sagsnummer") & " er nu afsluttet<br><br>Forneden kan du se de bedste bud på din forespørgsel<br><br>Kontaktinfo på de 3 bedste leverandører er:<br><br>"
           
            Do Until rs.EOF
           
                jmail.appendHTML "<b>" & rs("firmanavn") & "</b><br>"
                jmail.appendHTML rs("adresse") & "<br>"
                jmail.appendHTML rs("postnum") & "<br>"
                jmail.appendHTML rs("telefon") & "<br>"
                jmail.appendHTML rs("email") & "<br>"
                jmail.appendHTML "<b>Bud: DKK: " & rs("bud") & ",00</b><br><br>"
                RS.MoveNext
               
            Loop
           
            jmail.appendHTML "<br><br> Med venlig hilsen</font></body></html>"
            jmail.Body = "Din emailklient understøtter desværre ikke HTML"
            jmail.appendText "Din emailklient understøtter desværre ikke HTML"
           
            jmail.Send( "smtp" )
           
            db.Execute("UPDATE bud SET notify = 'ja' WHERE sagsnummer = " & tag)
           
            Response.Write "Afslutningsmail er nu blevet sendt"
           
        End If
   
    End If
End If
Avatar billede reino Nybegynder
29. juni 2005 - 07:47 #9
Hej igen

Så er jeg tilbage.

Nej, systemet skal kun sende mailen til en.

Når jeg prøver dit script får jeg denne fejl nu:

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

[Microsoft][ODBC Microsoft Access Driver] You tried to execute a query that does not include the specified expression 'bud' as part of an aggregate function.

Nogen ideer ?
Avatar billede busschou Praktikant
29. juni 2005 - 08:38 #10
Det kunne komme fra denne
Set rs = db.Execute("SELECT COUNT(*) AS cnt FROM bud WHERE sagsnummer = " & tag & " ORDER BY bud ASC")
Count(*) tæller alt hvor sagsnummer er lig med tag
Derfor er der ingen grund til at have Order By bud med, eftersom du ikke udvælger noget som helst men kun tæller
Prøv derfor med
Set rs = db.Execute("SELECT COUNT(*) AS cnt FROM bud WHERE sagsnummer = " & tag)
Avatar billede reino Nybegynder
27. februar 2006 - 21:08 #11
hey, busschou, din virkede fint, smider du et svar, bedre sent end aldrig :)
Avatar billede busschou Praktikant
28. februar 2006 - 06:32 #12
oki doki :o)
Avatar billede reino Nybegynder
28. februar 2006 - 08:20 #13
:)
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