/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
SQL forespørgelse i flere tabeller samtidi~
Fra : Jørgen Olesen


Dato : 09-10-08 11:18

Hej,

Jeg har en access database som indeholder tre tabeller.
Tabellerne er bygget fuldkommen identisk op (samme felter/type)
Tabellerne hedder: tab1, tab2, tab3
Hver tabel har felterne: ID, Dato, Tid, Event
Nu vil jeg så lave en forespørgelse som returnere de seneste 5
hændelser uafhængig af hvilken tabel de ligger i, sorteret efter
dato og tid.


Set conDB = Server.CreateObject ("ADODB.Connection")
conDB.Open = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " &
Server.MapPath("eventdb.mdb") &";"      

Set rsDB = Server.CreateObject ("ADODB.Recordset")
sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"
rsDB.Open sqlDB, conDB

While Not rsDB.EOF
response.write = rsDB.Fields("dato") & " (" &
response.write = rsDB.Fields("tid") & ") : " &
response.write = rsDB.Fields("Event") & "<br>"
rsDB.MoveNext
Wend

Når jeg nu ikke kan bruge "FROM *" eller "FROM tab1, tab2, tab3",
hvordan strikker jeg så en rigtigt SQL forespørgelse sammen?


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

 
 
Jørgen Olesen (09-10-2008)
Kommentar
Fra : Jørgen Olesen


Dato : 09-10-08 11:53

> sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"

Er kommet lidt videre.
Hvis jeg bruger nedenstående :

"SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC UNION SELECT
TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC UNION SELECT TOP 5 *
FROM tab3 ORDER BY dato DESC, Tid DESC"

Så får jeg en fin liste som indeholder ialt 15 elementer, som er
dato sorteret. Hvordan får jeg kogt den ned til kun at vise 5
elementer?



--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Stig Johansen (09-10-2008)
Kommentar
Fra : Stig Johansen


Dato : 09-10-08 15:10

Jørgen Olesen wrote:

>> sqlDB = "SELECT TOP 5 * FROM * ORDER BY dato DESC, Tid DESC"
>
> Er kommet lidt videre.
> Hvis jeg bruger nedenstående :
>
> "SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC UNION SELECT
> TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC UNION SELECT TOP 5 *
> FROM tab3 ORDER BY dato DESC, Tid DESC"
>
> Så får jeg en fin liste som indeholder ialt 15 elementer, som er
> dato sorteret. Hvordan får jeg kogt den ned til kun at vise 5
> elementer?

Nu er jeg ikke Access 'haj', men hvis det var MS SQLServer ville jeg prøve
at pakke den ind i en subselect.

Først lige 2 bemærkninger:
- Jeg ville aldrig bruge SELECT * på en tabel med mindre jeg skulle bruge
samtlige felter. Det er nemt at skrive, men til gengæld udtager man
overskydende felter til ingen nytte. (Performance issue).
- Vær opmærksom på, at en UNION virker (normalt) som en DISTINCT.
Hvis der er sammenfald i værdier, risikerer du ikke at få det hele med.
Så brug UNION ALL.

Men som sagt hvis det var MS SQLServer så:
SELECT TOP 5 * FROM (
SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC
UNION ALL
SELECT TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC
UNION ALL
SELECT TOP 5 * FROM tab3 ORDER BY dato DESC, Tid DESC
) ORDER BY dato DESC, Tid DESC

NB: Ej testet.

--
Med venlig hilsen
Stig Johansen

Jørgen Olesen (09-10-2008)
Kommentar
Fra : Jørgen Olesen


Dato : 09-10-08 19:19

Stig Johansen wrote in dk.edb.internet.webdesign.serverside.asp:
>
> SELECT TOP 5 * FROM (
> SELECT TOP 5 * FROM tab1 ORDER BY dato DESC, Tid DESC
> UNION ALL
> SELECT TOP 5 * FROM tab2 ORDER BY dato DESC, Tid DESC
> UNION ALL
> SELECT TOP 5 * FROM tab3 ORDER BY dato DESC, Tid DESC
> ) ORDER BY dato DESC, Tid DESC
>
> NB: Ej testet.

Testet og det virker perfekt!
Tak for hjælpen.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Erling Sørensen (10-10-2008)
Kommentar
Fra : Erling Sørensen


Dato : 10-10-08 04:32


"Stig Johansen" <wopr.dk@gmaill.com> skrev i en meddelelse
news:48ee10df$0$90266$14726298@news.sunsite.dk...

> - Jeg ville aldrig bruge SELECT * på en tabel med mindre jeg skulle bruge
> samtlige felter. Det er nemt at skrive, men til gengæld udtager man
> overskydende felter til ingen nytte. (Performance issue).

Jeg ville aldrig bruge SELECT * overhovedet.
Hvis man enten med det samme, eller måske først senere, bestemmer sig til at
gemme sit record set i et Array, har man ikke styr på hvilke værdier der
havner på hvilke pladser i Array'et.

mvh
Erling



Jørgen Olesen (10-10-2008)
Kommentar
Fra : Jørgen Olesen


Dato : 10-10-08 07:44

Erling Sørensen wrote in dk.edb.internet.webdesign.serverside.asp:
> Jeg ville aldrig bruge SELECT * overhovedet.
> Hvis man enten med det samme, eller måske først senere, bestemmer sig til at
> gemme sit record set i et Array, har man ikke styr på hvilke værdier der
> havner på hvilke pladser i Array'et.

I den aktuelle opgave er det ligegyldigt.
Dataene skal udskrives på skærmen med det samme, så der er ingen grunde til at
indlæse dem i et array. Det er tale om 5 records med hver 4 felter, det er
lige til at overskue.


--
Vil du lære at kode HTML, XHTML, CSS, SSI, ASP eller ASP.NET?
- Pædagogiske tutorials på dansk
- Kom godt i gang med koderne
KLIK HER! => http://www.html.dk/tutorials

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste