Avatar billede meken Nybegynder
10. marts 2003 - 13:41 Der er 16 kommentarer og
1 løsning

Udtag fra flere tabeller?!

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("news/database.mdb")
strSQL = "select top 5 * from navn, link ORDER BY id DESC"
set rs = Conn.execute(strSQL)

if rs.EOF then
Response.write "<font class=""main"">Ingen nyheder i databasen.</font>"
else
Do Until rs.EOF
%>

Jeg vil have min side til at vise de nyeste poster fra 5 tabeller i en DB.

Og som i kan se længere opppe, kan man jo ikke bare sige:

strSQL = "select top 5 * from navn,link ORDER BY id DESC"

Men hvad skal jeg så gøre??
Avatar billede jpvj Nybegynder
10. marts 2003 - 14:07 #1
UNION?
Avatar billede meken Nybegynder
10. marts 2003 - 14:20 #2
huh?
Avatar billede jpvj Nybegynder
11. marts 2003 - 02:10 #3
Du laver først et view - dette skal kun gøres 1 gang.

CREATE VIEW test AS
SELECT id, st FROM table1
UNION ALL
SELECT id, st FROM table2
UNION ALL
SELECT id, st FROM table3

Herefter kan du lave queries på "test", som om det var 1 tabel:
SELECT TOP 5 * FROM test
Avatar billede meken Nybegynder
11. marts 2003 - 09:59 #4
Så får jeg denne kode:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("links/links.mdb")

CREATE VIEW link AS
SELECT id, st FROM osi
UNION ALL
SELECT id, st FROM os
UNION ALL
SELECT id, st FROM linux

strSQL = "Select Top 1 * from link ORDER BY dato"
set rs = Conn.execute(strSQL)


if rs.EOF then
Response.write "<font class=""main"">Ingen nyheder i databasen.</font>"
else
Do Until rs.EOF
%>

Men det virker ikke:

Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0401)
Slut på sætning var ventet
/dc/Default.asp, line 109, column 12
CREATE VIEW link AS
Avatar billede meken Nybegynder
11. marts 2003 - 10:00 #5
Fejltype:
Der opstod en Microsoft VBScript-kompileringsfejl (0x800A0401)
Slut på sætning var ventet
/dc/Default.asp, line 109, column 12
CREATE VIEW link AS
-----------^
Avatar billede websmith Nybegynder
11. marts 2003 - 10:11 #6
Du bruger jo Access, så du kan ikke lave views.
Du skal i stedet bruge en gemt forspørgsel.

Jeg ved ikke om man kan lave en sådan med en sql streng, men du kan ihvertfald lave en med Access programmet, og der kan du så bruge din sql med UNION.

Derudover så tror jeg heller ikke at Access forstår Top, så der er du nok nødt til at finde på noget andet dvs. noget med at tælle hvor mange records du har hentet, og så stoppe når du har nået det ønskede antal
Avatar billede websmith Nybegynder
11. marts 2003 - 10:14 #7
Og den korrekte UNION SQL sætning må være at du skal bruge top 1 fra hver tabel, og så bare selecte alle fra din gemte forspørgsel. Hvis du bruger den som jpvi har skrevet, så vil den jo bare hente de 5 første fra den ene tabel, da den sansynligvis ligger "øverst" i det view.
Avatar billede meken Nybegynder
11. marts 2003 - 10:15 #8
Access forstår top. Men resten forstå jeg ikke helt.
Avatar billede meken Nybegynder
11. marts 2003 - 10:15 #9
Ok, hvad vil dit forslag så blive??
Avatar billede websmith Nybegynder
11. marts 2003 - 11:31 #10
Du åbner Access, Åbner databasen.

Opretter en Query med følgende indhold:

SELECT top 1 id, st FROM osi
UNION ALL
SELECT top 1 id, st FROM os
UNION ALL
SELECT top 1 id, st FROM linux

Gemmer denne query.

I din .asp side skriver du så bare

select * from din_gemte_query

Så skulle den gerne returnere den "øverste" post i de tre tabeller. Det kan være at du skal sætte lidt sortering på ved fx at ændre lidt på din gemte query, eller hente et par felter mere..
Avatar billede jpvj Nybegynder
12. marts 2003 - 06:22 #11
OK - jeg ved absolut intet mere om Access end navnet :-)
Avatar billede the_bma_man Nybegynder
15. marts 2003 - 08:44 #12
Websmith>Det vil jo ikke give ham de nyeste - på tværs af tabeller.
Det kan jo godt være at de sidste to nyeste er i den samme tabel.
Så der holder den altså ikke.
For at det skal virke må du indføre en id, der er unik på tværs af de berørte tabeller - og ja, denne må nok vedligeholdes manuelt.
Og så er det denne, der selectes top5 på.
Avatar billede meken Nybegynder
20. marts 2003 - 10:10 #13
Jeg er forviret, hvad skal jeg gøre og hvad kan jeg ikke gøre...?
Avatar billede the_bma_man Nybegynder
01. april 2003 - 09:18 #14
Du opretter et felt mere i dine tabeller - globalID eller noget i den retning.
Når du indsætter en record, skal du selv sørge for, at denne bliver sat.
Når du du skal selecte, selecter du top5 fra en union af dine tabeller.
Avatar billede meken Nybegynder
03. april 2003 - 22:12 #15
jeg forstår godt at jeg skal oprette en tabel "GlobalID" men ikke andet...
Avatar billede meken Nybegynder
14. april 2003 - 16:12 #16
glem det. jeg har droppet det, forstår Jer ikke.
Avatar billede meken Nybegynder
14. april 2003 - 16:12 #17
lukket.
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