10. marts 2003 - 13:41Der 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"
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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
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 -----------^
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
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.
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..
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å.
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.
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.