SELECT Kunstner.Navn, Maleri.Navn FROM Maleri INNER JOIN Kunstner ON Maleri.KunstnerID = Kunstner.KunstnerID
Det giver dig en liste over alle malerier, med tilhørende kunstner.
Dette er hele fidusen ved at lave relaterede data. Find en god indføring i SQL for begyndere, så skal du bare se. SQL er ret let at lære, det er nok at lære ca. 10-15 udtryk, så er du rigtig godt med.
Det lyder fornuftigt nok, men jeg har vist ikke hjerne til at udføre det i virkeligheden - jeg har prøvet mig frem, og har fået den til at vise alle produkterne, med det rigtige link til den kunstner som har lavet dem - men det navn den skriver passer ikke til. De er også bare listet i rækkefølge ned af.
Kan man ændre noget i det her, eller er det helt galt ?:
<% sqlBilleder = "SELECT * FROM billeder WHERE artNr=1 ORDER BY billedeID DESC" Set rsBilleder = Conn.Execute(sqlBilleder) sqlKunstner = "SELECT * FROM kunstner WHERE ORDER BY kunstnerNavn" Set rsKunstner = Conn.Execute(sqlKunstner) %>
<table background="grafik/pattern.gif" width="960" height="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <td width="960" valign="top"> <br><br> <% Do While Not rsKunstner.Eof Do While Not rsBilleder.EOF %>
<% sqlBilleder = "SELECT * FROM billeder WHERE artNr=1 ORDER BY billedeID DESC" Set rsBilleder = Conn.Execute(sqlBilleder) sqlKunstner = "SELECT * FROM kunstner WHERE ORDER BY kunstnerNavn" Set rsKunstner = Conn.Execute(sqlKunstner) %>
<table background="grafik/pattern.gif" width="960" height="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <td width="960" valign="top"> <br><br> <% Do While Not rsBilleder.EOF sqlKunstner = "SELECT * FROM kunstner WHERE id = "&rsbilleder("kunstnerid") Set rsKunstner = Conn.Execute(sqlKunstner) %>
Jeg må protestere, der et slet ikke nødvendigt at åbne et nyt recordset for hvert billede. Det ville gå helt galt hvis du havde en side med mange besøgende:
<% sqlBilleder = "SELECT BilledeID, KustnerID, Lportraet, KunstnerNavn, DanskTekst, DanskPris, Storrelse, Status FROM Billeder INNER JOIN Kunstner ON Billeder.KustnerID Kunstner.ID WHERE Billeder.artNr = 1 ORDER BY Billeder.BilledeID DESC" Set rsBilleder = Conn.Execute(sqlBilleder)
Så forstår jeg ikke at du kommer med så tosset en løsning. Det havde dog været bedre at åbne billederne for sig, og kunstnerne for sig, og så for hvert billede at loope gennem kunstnerne til man fandt den rigtige.
Men jeg håber klas vil se på min løsning, og bruge den. Man kommer ikke udenom at lære SQL, og har man ikke hjerne til det, så skal man lave noget andet. Personligt tror jeg det er dovenskab, hvilket i sig selv er et tegn på intelligens ...
SELECT Kunde.Navn, Ordre.OrdreID FROM Kunde INNER JOIN Ordre ON Kunde.KundeID = Ordre.KundeID Giver: ----------- Navn OrdreID ------------ Hans 1 Hans 3 Hans 4 Anne 2
SELECT Kunde.Navn, Ordre.OrdreID FROM Kunde LEFT OUTER JOIN Ordre ON Kunde.KundeID = Ordre.KundeID Giver: ----------- Navn OrdreID ----------- Hans 1 Hans 3 Hans 4 Jens NULL Anne 2
I et OUTER JOIN er der en hovedtabel, i et LEFT OUTER JOIN den der står til venstre i sætningen, her Kunde. Fra den vises alle poster, og såfremt der findes relaterede data, vises disse.
I INNER JOIN vises data kun hvis der findes relaterede data.
Som du ser vises Jens ikke i et inner join fordi kan ingen ordrer har.
Hvis du vil have en liste over kunder der ingen ordrer har skriver du: SELECT Kunde.Navn, Ordre.OrdreID FROM Kunde LEFT OUTER JOIN Ordre ON Kunde.KundeID = Ordre.KundeID WHERE Ordre.OrdreID IS NULL
Hvis man alligevel skal lære "den svære syntaks" for at lave OUTER JOINS, så kan man lige så godt bruge den hele tiden. Den forekommer mig også at være mere præcis, idet joinoplysningerne står sammen med tabelangivelsen, og ikke sammen med de øvrige WHERE-argumenter
Synes godt om
Ny brugerNybegynder
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.