21. juni 2005 - 08:57Der 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.
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")
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") & "")
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
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
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
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>"
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.
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)
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.