Avatar billede mvk Nybegynder
22. oktober 2004 - 13:42 Der er 30 kommentarer og
1 løsning

Where med indbygget SQL sætning

hvorfor kan jeg ikke få dette til at virke:

SELECT *  FROM test  WHERE (SELECT Sprog FROM nyhedsbrev ORDER BY IDnyhedsbrev DESC)= test.Sprog  ORDER BY Email ASC
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:44 #1
Prøv istedet :
SELECT * FROM test WHERE test.Sprog IN (SELECT Sprog FROM nyhedsbrev) ORDER BY email ASC
Avatar billede natsprinter Nybegynder
22. oktober 2004 - 13:45 #2
SELECT * FROM test  WHERE exixts (SELECT Sprog FROM nyhedsbrev ORDER BY IDnyhedsbrev DESC)= test.Sprog  ORDER BY Email ASC
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:45 #3
det er meget vigtigt at det er den sidste record fra nyhedsbrev tabellen den tager - kan jeg så klare mig uden ORDER BY IDnyhedsbrev DESC ?
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:47 #4
nå ok... Jeg troede det var alle...
Så prøve enten:
SELECT *  FROM test  WHERE (SELECT TOP 1 Sprog FROM nyhedsbrev ORDER BY IDnyhedsbrev DESC)= test.Sprog  ORDER BY Email ASC
eller
SELECT * FROM test WHERE test.Sprog IN (SELECT TOP 1 Sprog FROM nyhedsbrev ORDER BY IDNyhedsbrev DESC) ORDER BY email ASC
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:48 #5
hvilken database bruger du egentlig.. Det er lidt væsentligt for syntax også..
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:49 #6
MySQL
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:50 #7
ok.. så skulle ovenstående vist være godt nok.. Virker det ikke?
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:51 #8
hov... den hedder vist LIMIT istedet for TOP på mysql.
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:51 #9
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'
[TCX][MyODBC]You have an error in your SQL syntax near 'SELECT TOP 1 Sprog FROM nyhedsbrev ORDER BY IDNyhedsbrev DESC) ORDER BY Email AS' at line 1
/admin/nyhedsbrev/Copy of script_nyhedsbrev.asp, line 26
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:52 #10
jeg tror det skyldes top->limit.
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:52 #11
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'SELECT LIMIT 1 Sprog FROM nyhedsbrev ORDER BY IDNyhedsbrev DESC) ORDER BY email ' at line 1

/admin/nyhedsbrev/Copy of script_nyhedsbrev.asp, line 26
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:55 #12
virker heller ikke:
Microsoft OLE DB Provider for ODBC Drivers error '80040e09'

[TCX][MyODBC]You have an error in your SQL syntax near 'SELECT Sprog FROM nyhedsbrev ORDER BY IDNyhedsbrev DESC LIMIT 1) ORDER BY email ' at line 1

/admin/nyhedsbrev/Copy of script_nyhedsbrev.asp, line 26
Avatar billede mvk Nybegynder
22. oktober 2004 - 13:57 #13
virker heller ikke: "SELECT * FROM test WHERE (SELECT Sprog FROM nyhedsbrev ORDER BY IDNyhedsbrev DESC LIMIT 1)=test.Sprog ORDER BY Email ASC"
Avatar billede anhansen Nybegynder
22. oktober 2004 - 13:57 #14
har du prøvet med 'IN-løsningen' ?
Avatar billede anhansen Nybegynder
22. oktober 2004 - 14:00 #15
hmm.. er ikke helt sikker på hvordan IN virker i mysql.

Er du sikker på at alle tabeller og felter er rigtigt skrevet?
Avatar billede anhansen Nybegynder
22. oktober 2004 - 14:01 #16
Er desværre nød til at smutte nu... Har gæster der venter..

Men jeg vender lige tilbage senere engang... Håber du finder en løsning...
Avatar billede mvk Nybegynder
22. oktober 2004 - 14:05 #17
virker heller ikke:
"SELECT * FROM test WHERE test.Sprog IN (SELECT LIMIT 0,1 Sprog FROM nyhedsbrev ORDER BY IDnyhedsbrev DESC) ORDER BY Email ASC"


Tabel: test
IDmodtager
Email
Sprog

Tabel: nyhedsbrev
IDnyhedsbrev
Overskrift
Tekst
Dato
Sprog
Avatar billede mvk Nybegynder
22. oktober 2004 - 14:06 #18
okay - anhansen - ingen løsning endnu :)
Avatar billede mvk Nybegynder
22. oktober 2004 - 14:27 #19
forklaring følger:

når man opretter sig som modtager af nyhedsbrevet angiver man sin email og hvilket sprog man vil modtage nyhedsbrevet på

når man som administrator opretter et nyhedsbrev skal man derfor angive hvilket sprog man skriver nyhedsbrevet på

derfor skal scriptet kun sende emails til de brugere der har tilmeldt sig det sprog administratoren har skrevet det sidste nyhedsbrev på

::: forklaring slut :)
Avatar billede anhansen Nybegynder
25. oktober 2004 - 07:52 #20
ja... ok... jeg tror godt jeg forstår problematikken... Jeg synes bare at sql'en burde virke.
Og du er sikker på at test.Sprog og nyhedsbrev.Sprog er af samme type?
Ellers kan jeg ikke lige se hvorfor det ikke skulle virke... Selvom jeg godt kan forstå på dig at det gør det ikke... :-(
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:16 #21
ja de er begge type TEXT og jeg har checket at alt passer til det der står i databasen - det er underligt.
måske kan jeg klare det med en IF THEN ELSE i selve koden.

sådan er hele min kode (indsætter forslag i ny post):

<%@LANGUAGE="VBSCRIPT"%>
<!--#include file="../../Connections/database.asp" -->
<%
Dim rsNyhedsbrev
Dim rsNyhedsbrev_numRows
Set rsNyhedsbrev = Server.CreateObject("ADODB.Recordset")
rsNyhedsbrev.ActiveConnection = MM_database_STRING
rsNyhedsbrev.Source = "SELECT * FROM nyhedsbrev ORDER BY IDnyhedsbrev DESC"
rsNyhedsbrev.CursorType = 0
rsNyhedsbrev.CursorLocation = 2
rsNyhedsbrev.LockType = 1
rsNyhedsbrev.Open()
rsNyhedsbrev_numRows = 0

Overskrift = (rsNyhedsbrev.Fields.Item("Overskrift").Value)
Tekst = rsNyhedsbrev("Tekst")

Dim rsEmails
Dim rsEmails_numRows
Set rsEmails = Server.CreateObject("ADODB.Recordset")
rsEmails.ActiveConnection = MM_database_STRING
rsEmails.Source = "SELECT * from test ORDER BY Email ASC"
rsEmails.CursorType = 0
rsEmails.CursorLocation = 2
rsEmails.LockType = 1
rsEmails.Open()
rsEmails_numRows = 0

  on error resume next
  Do While Not rsEmails.EOF
  strEmail = (rsEmails.Fields.Item("Email").Value)

    Set JMail                = Server.CreateObject("JMail.SMTPMail")
    JMail.ServerAddress        = "websmtp.perchs.dk;websmtp.perchs.dk;mailrelay.andersenit.dk"
    JMail.Sender            = "admin@perchs.dk"
    JMail.SenderName        = "A. C. Perchs Thehandel"
    JMail.ContentType        = "text/html"
    JMail.Subject            = Overskrift
    JMail.AddRecipient        strEmail
    JMail.Priority          = 3
    JMail.AddHeader          "Originating-IP", Request.ServerVariables("REMOTE_ADDR")
    Jmail.Body              = Tekst
 
  JMail.Execute
  Set JMail = Nothing
  rsEmails.MoveNext
  Response.Write (strEmail) & "</p>"
  Loop

rsNyhedsbrev.Close()
Set rsNyhedsbrev = Nothing
rsEmails.Close()
Set rsEmails = Nothing

'    Response.Redirect "oversigt_nyhedsbrev.asp"
%>
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:18 #22
burde jeg så kunne klare den med:
  on error resume next
  Do While Not rsEmails.EOF AND ((rsNyhedsbrev.Fields.Item("Sprog").Value)=(rsEmails.Fields.Item("Sprog").Value))
  strEmail = (rsEmails.Fields.Item("Email").Value)
Avatar billede anhansen Nybegynder
26. oktober 2004 - 08:26 #23
Du kan helt klart lave funktionen i kode i stedet. Jeg ville nok gøre det lidt anderledes end du skitserer.
I første sql ville jeg tage "limit 1" igen - da du hiver alle nyhedsbreve ud - men alligevel kun bruger det første (bare lidt performance).
I anden sql skal du huske at have sprog med som parameter. Altså SELECT * FROM test WHERE Sprog = "& rsnyhedsbrev("sprog") &"  ORDER BY Email ASC
Så er du fri for at lave if i kombination med while - som du har skrevet den tror jeg ikke den virker - da while vist ville stoppe første gang den møder en med et andet sprog og det er jo ikke meningen.

Kan du følge det?
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:28 #24
hehe - min virker heller ikke - prøver lige din
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:32 #25
Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[TCX][MyODBC]Unknown column 'Dansk' in 'where clause'

/admin/nyhedsbrev/Copy of script_nyhedsbrev.asp, line 27
Avatar billede anhansen Nybegynder
26. oktober 2004 - 08:33 #26
Ups... glemte du brugte tekst til sprog...
Lav: SELECT * FROM test WHERE Sprog = "& rsnyhedsbrev("sprog") &"  ORDER BY Email ASC
om til : SELECT * FROM test WHERE Sprog = '"& rsnyhedsbrev("sprog") &"'  ORDER BY Email ASC
Der skal lige "klammer" ' om sproget.
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:37 #27
u da man!!! det spiller

Tusinde tak for din tålmodighed og hjælp :)
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:37 #28
skylder dig point
Avatar billede anhansen Nybegynder
26. oktober 2004 - 08:39 #29
Altid dejligt at få det til at virke... :-) Og så så tidligt på dagen... hehe...

Her er lige et svar..
Avatar billede mvk Nybegynder
26. oktober 2004 - 08:52 #30
super tak
Avatar billede anhansen Nybegynder
26. oktober 2004 - 08:59 #31
og tak for point.. :-)
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