Avatar billede petroslam Nybegynder
20. maj 2003 - 20:59 Der er 11 kommentarer og
1 løsning

Joine 3 tabeller med een sql sætning i asp

HEJ!
Jeg har 3 tabeller kundeinfo, booking & gruppebooking.
Fra booking skal jeg bruge felterne:
bookingNr
ordreNr
kundeID
tblRest
tblPris

Fra gruppebooking skal jeg bruge:
bookingNr
tblArrangor
lejlID

kundeinfo indeholder:
kundeID
tblOrdrer (som er en kommasepareret liste med booking Numre)

Det jeg skal bruge er et recordset der samler alle poster fra gruppebooking hvori et bookingNr fra tblOrdrer indgår og alle de poster fra booking hvor de poster der har et bookingNr hvor et nummer fra tblOrdrer indgår OG hvor kundeID lig med en session variabel - session("kundeID").

Hvis bookingNr er ens i både gruppeBooking og booking skal de to poster slåes sammen.

Lidt kryptiskt, men håber I kan hjælpe og gerne hurtigt!!
Avatar billede petroslam Nybegynder
20. maj 2003 - 21:10 #1
Det skal siges, at jeg har forsøgt med både:
strSQL = "SELECT DISTINCT booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, booking.tblDep, gruppebooking.bookingNr as bookingNr2, gruppebooking.lejlID, gruppeBooking.prisID FROM booking RIGHT JOIN gruppebooking ON gruppebooking.bookingNr=booking.bookingNr WHERE gruppebooking.bookingNr in(" & rsKunde("tblOrdrer") & ") ORDER BY booking.bookingNr"
- hvor jeg har tblOrdrer fra et andet recordset. Det gav næsten det rigtige resultat. Jeg de rigtige poster fra gruppebooking, posterne fra booking indeholdt også poster med et andet kundeID (fordi der godt kan eksistere flere poster i booking med samme bookingNr)

OG MED:
strSQL = "SELECT booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, booking.tblDep, gruppebooking.bookingNr as bookingNr2, gruppebooking.lejlID, gruppeBooking.prisID FROM booking RIGHT JOIN gruppebooking ON gruppebooking.bookingNr=booking.bookingNr WHERE gruppebooking.bookingNr in(" & rsKunde("tblOrdrer") & ") AND booking.kundeID = 33 ORDER BY booking.bookingNr"

- hvor jeg kun får de poster gra gruppebooking der har en tilsvarende post i booking med kundeID = 33
Avatar billede hossein Nybegynder
20. maj 2003 - 21:43 #2
Select booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, booking.tblDep, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.prisID, kundeinfo.tblOrdrer from booking, gruppebooking, kundeinfo where booking.bookingNr = gruppebooking.bookingNr And booking.kundeID = kundeinfo.kundeID and booking.kundeID = 33 and kundeinfo.tblOrdrer =???

den joiner alle 3 tabeller sammen, men sidste del, skal være lige med en session?
Avatar billede petroslam Nybegynder
20. maj 2003 - 22:21 #3
nej, det er mig der vrøvler - det må du undskylde. session("kundeID") hjælper med at finde brugeren i tabellen kundeinfo. Fra kundeinfo bruges tblOrdrer til at finde poster i gruppebooking og booking. I nogle tilfælde er der både en post med samme bookingNr i booking og gruppebooking - hvis det sker skal de to poster slåes sammen. MEN de skal kun slåes sammen hvis kundeID i booking er lige session("kundeID").
Dvs. at alle poster fra gruppebooking med et bookingNr der findes i tblOrdrer skal bruges, mens det kun er de poster fra booking der har et bookingNr der findes i tblOrdrer og et kundeID lig session("kundeID") der skal bruges. Jeg ved ikke om det gjorde det lettere at forstå?
Avatar billede oasen Nybegynder
21. maj 2003 - 12:27 #4
Select booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, kundeinfo.tblOrdrer From (kundeinfo Inner Join gruppebooking On kundeinfo.tblOrdrer = gruppebooking.bookingNr) Inner Join booking On kundeinfo.tblOrdrer = booking.bookingNr And KundeID = " & Session("kundeID") & " Group By booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, kundeinfo.tblOrdrer
Avatar billede petroslam Nybegynder
21. maj 2003 - 14:19 #5
Oasen:
Jeg får denne fejlmeddelelse:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A03FD)
'Case' var ventet

tblOrdrer i kundeinfo kan godt indeholde flere bookingNr - men aldrig to af det samme. De er kommasepareret dvs. at tblOrdrer for en kunde f.eks. kunne være "10000071, 10000074".
Avatar billede oasen Nybegynder
21. maj 2003 - 14:33 #6
Kommaseparerede? Så skal du bruge IN-operatoren, men den er desværre meget krævende at anvende.
Jeg mener helt klart, at du bør lave en seperat tabel til tblOrdrer's. Det andet er ikke god tabelstruktur...

Hvilken linie får du fejlen i?
Avatar billede petroslam Nybegynder
21. maj 2003 - 16:30 #7
Hm, det er faktisk lidt pinligt - havde kaget temmelig meget rundt i koden.
Mht. til tblOrdrer har jeg lavet en ny tabel kaldet Ordrer og lavet 3 felter i den. kundeID, tblOrdrer og ID(autonummerering). Nu er der kun en post pr. bookingNr, dvs. at tabellen Ordrer ser sådan ud:

kundeID      BookingNr      ID
33          10000074        1
33          10000078        2

Jeg har ændret i sql'en og har skiftet kundeinfo ud med Ordrer, da det nu er denne tabel der holder styr på kundens tidligere ordrer, her er hele mit dokument

<%@LANGUAGE="VBSCRIPT" %>
<!-- #include file="conn.asp" -->
<%
conn.open dsn
strSQL = "Select booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, ordrer.tblOrdrer From (Ordrer Inner Join gruppebooking On ordrer.tblOrdrer = gruppebooking.bookingNr) Inner Join booking On ordrer.tblOrdrer = booking.bookingNr And KundeID = " & Session("brugerID") & " Group By booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, Ordrer.tblOrdrer"
set rsTest = conn.execute(strSQL)

conn.close
set conn = nothing
%>

Nu får jeg denne fejl:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Joinudtrykket understøttes ikke.
/sx/bruger_ordrestatus_oversigt.asp, line 6

Linje 6 er set rsTest = .....
Avatar billede oasen Nybegynder
21. maj 2003 - 18:37 #8
KundeID = " & Session("brugerID")

~

Ordrer.KundeID = " & Session("brugerID")
Avatar billede petroslam Nybegynder
21. maj 2003 - 19:53 #9
Jeg får stadig denne fejl:
Microsoft OLE DB Provider for ODBC Drivers (0x80004005)
[Microsoft][ODBC Microsoft Access-driver] Joinudtrykket understøttes ikke.
/sx/bruger_ordrestatus_oversigt.asp, line 6
Avatar billede oasen Nybegynder
22. maj 2003 - 08:44 #10
Det begynder at blive lidt forvirrende, men det er godt du fik lavet tabellen med ordrer.
Jeg tror, vi nærmer os med følgende.

Select booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, Ordrer.bookingNr From Ordrer, booking, gruppebooking Where Ordrer.bookingNr = gruppebooking.bookingNr Or (Ordrer.bookingNr = booking.bookingNr And Ordrer.kundeID = " & Session("kundeID") & ") Group By booking.OrdreNr, booking.bookingNr, booking.kundeID, booking.tblRest, booking.tblPris, gruppebooking.bookingNr, gruppebooking.lejlID, gruppeBooking.tblArrangor, Ordrer.bookingNr
Avatar billede petroslam Nybegynder
22. maj 2003 - 11:12 #11
Nu er det så den her jeg får:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre. Der var ventet 1.
/sx/bruger_ordrestatus_oversigt.asp, line 6
Avatar billede petroslam Nybegynder
24. maj 2003 - 21:10 #12
nå, så lukker jeg spørgsmålet, men du skal have tak fordi du prøvede! ;)
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