Just nu i M3-nätverket
Gå till innehåll

Hämta från fler tabeller? Hur?


Patronbutiken

Rekommendera Poster

Patronbutiken

Jag har en sida som skall hämta data från tre tabeller i samma databas, tabellerna är identiska sånär som på innehållet. Dvs alla fältnamn är lika.

Länken som går till denna sida är ung.

produkt.asp?artnr=<% =rs("art1") %> OR artnr =<% =rs("art1") %> OR ....osv.

Det enda jag inte begriper är hur jag skall skriva själva databaskopplingen.

Vad jag förstår ska det vara nånting typ

select * from org, komp, ref WHERE ........

Där tar det stopp.

Har någon en susning hur jag gör detta

Mvh Peter

Länk till kommentar
Dela på andra webbplatser

syntaxen för att hämta från flera tabeller är ungefär som följer;

 

SELECT tabell1.kolum1, tabell2.kolumn1, tabell3.kolum1 FROM tabell1, tabell2, tabell3 WHERE tabell1.kolumn1 = tabell2.kolumn1 AND tabell3.kolumn1 = 1

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Provade detta men det gick åt småland,

Det kanske blir bättre om jag beskriver så här.

Tabell1(ORGINK)

Fältnamn ARTNR

Tabell2(KOMINK)

Fältnamn ARTNR

Tabell3 (REFINK)

Fältnamn ARTNR

 

Sidan (visa.asp)skall alltså hämta ARTNR ur någon av de tre tabellerna om det motsvarar det ARTNR som skickats från förg. sida

på den sidan står t.ex

<a href="visa.asp?ARTNR=<%=rs("NR1")%></a>

 

Länk till kommentar
Dela på andra webbplatser

>Sidan (visa.asp)skall alltså hämta ARTNR ur någon av de tre tabellerna om det motsvarar det ARTNR som skickats från förg. sida

 

 

strSQL ="SELECT tabell1.kolum1, tabell2.kolumn1, tabell3.kolum1 FROM tabell1, tabell2, tabell3 WHERE

tabell1.kolumn1 = "& request.querystring("ARTNR") &" OR

tabell2.kolumn1 = "& request.querystring("ARTNR") &" OR

tabell3.kolumn1 = "& request.querystring("ARTNR")

 

lånade lite av sql-strängen från Esuk, har inte testat eller kontrollerat men det borde stämma överens med vad du är ute efter.

 

| D |

 

[inlägget ändrat 2002-08-18 16:15:27 av David Shamloo]

Länk till kommentar
Dela på andra webbplatser

 

select orgink.*,'ORGINK' from ORGINK where artnr = 4711

union

select komink.*,'KOMINK' from KOMINK where artnr = 4711

union

select refink.*,'REFINK' from REFINK where artnr = 4711

 

Strängarna 'ORGINK' etc är bara till för att veta vilken tabell värdet kommer ifrån.

 

Red: Felstavat kolumnnamn.

[inlägget ändrat 2002-08-18 16:33:58 av Lars Berg]

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

det är nog jag som klantar till det tror jag.

Min tanke är att om inte det efterfrågade artnr inte finns i tabell 1 skall den leta i tabell 2 osv.

fältet Artnr är i texformat om det kan vara till någon hjälp

Om man kollar på min sida www.patronbutiken.com väljer t.ex Hewlett packard, så visas en massa modeller, det är den länken från modellsidan som skickas till "visa.asp" som skall hämta de olika artikarna ur de olika tabellerna

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Din kod funkar "Hurra"

det blev en himla massa nuffror för att få det att funka, borde gå att göra nåt åt tycker man, se här

<%

id=Request.QueryString("NR1")

id2=Request.querystring("NR2")

id3=Request.querystring("NR3")

id4=Request.querystring("NR4")

id5=Request.querystring("NR5")

id6=Request.querystring("NR6")

id7=Request.querystring("NR7")

id8=Request.querystring("NR8")

id9=Request.querystring("NR9")

id10=Request.querystring("NR10")

id11=Request.querystring("NR11")

id12=Request.querystring("NR12")

 

Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath("./access/patron.mdb")

sql = "SELECT ORGINK.ARTNR from ORGINK WHERE ARTNR = '" & id & "' OR ARTNR = '" & id2 & "' OR ARTNR = '" & id3 & "' OR ARTNR = '" & id4 & "' OR ARTNR = '" & id5 & "' OR ARTNR = '" & id6 & "' OR ARTNR = '" & id7 & "' OR ARTNR = '" & id8 & "' OR ARTNR = '" & id9 & "' OR ARTNR = '" & id10 & "' OR ARTNR = '" & id11 & "' OR ARTNR = '" & id12 & "' union SELECT KOMPINK.ARTNR from KOMPINK WHERE ARTNR = '" & id & "' OR ARTNR = '" & id2 & "' OR ARTNR = '" & id3 & "' OR ARTNR = '" & id4 & "' OR ARTNR = '" & id5 & "' OR ARTNR = '" & id6 & "' OR ARTNR = '" & id7 & "' OR ARTNR = '" & id8 & "' OR ARTNR = '" & id9 & "' OR ARTNR = '" & id10 & "' OR ARTNR = '" & id11 & "' OR ARTNR = '" & id12 & "' union SELECT REFINK.ARTNR from REFINK WHERE ARTNR = '" & id & "' OR ARTNR = '" & id2 & "' OR ARTNR = '" & id3 & "' OR ARTNR = '" & id4 & "' OR ARTNR = '" & id5 & "' OR ARTNR = '" & id6 & "' OR ARTNR = '" & id7 & "' OR ARTNR = '" & id8 & "' OR ARTNR = '" & id9 & "' OR ARTNR = '" & id10 & "' OR ARTNR = '" & id11 & "' OR ARTNR = '" & id12 & "' "

set rs = Server.CreateObject("ADODB.Recordset")

rs.Open sql, conn, 3, 3

%>

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

det blev en himla massa nuffror för att få det att funka, borde gå att göra nåt åt tycker man, se här

 

Inte för att vara elak, men om jag vore du skulle jag sätta mig och tänka om när det gäller databasen, känns som att du behöver strukturera upp den bätre.

 

t.ex. fråga dig själv varför du har 3 tabeller och inte 1 tabell med Artikelnummren.

 

Du skriver i ditt första inlägg att alla tabellerna är sånär identiska förutom innehållet, ta och lägg allt i samma tabell.

Sedan kan du t.ex. lägga till ett kategoriID för dem för att dela in dem i kategorier eller liknande.

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

sin = "("
for i = 1 to 12
if i > 1 then sin = sin & ","
sin = sin & "'" & request.querystring("NR" & i) & "'"
next
sin = sin & ")"

sql = "select artnr from orgink where artnr in " & sin & _
" union " & _
"select artnr from kompink where artnr in " & sin & _
" union " & _
"select artnr from refink where artnr in " & sin 

 

Varför har du tre olika tabeller? Det borde räcka med en tabell där du har med ett typfält som anger ORGINK, KOMPINK eller REFINK

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Tack Esuk och Lars för era svar,

Tyvärr är det så att det är fler än tre tabeller. nämligen 12st.

Orsaken till detta är att jag ville strukturera upp artiklarna i olika grupper, kan behövas när man har närmare 40.000 st. det är då lättare att lägga till, ändra osv en produkt.

Jag vet inte om det är det bästa sättet men det funkar.

En tabell heter t.ex kategori det är där jag anger vilka artiklar som passar vilken skrivare

Nu skall jag prova att göra om koden som du skrev lars så får vis se.

Tack skall ni ha för hjälpen, kanske får jag återkomma :-)

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Om jag vore du skulle jag ögonaböj sätta mig med penna och papper och börja om från början.

 

Om du har 40 000 artiklar och delar in dessa i 12 tabeller kommer prestandad på t.ex. "Sök produkt" i alla tabeller att bli något katastrofalt jämfört med om alla produkter låg i samma tabell.

 

Du kommer även att få skriva en hel del onödigt långa SQL satser.

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Om jag vore du skulle jag ögonaböj sätta mig med penna och papper och börja om från början.

Håller med! Databasen är helt felaktigt designad.

 

Orsaken till detta är att jag ville strukturera upp artiklarna i olika grupper, kan behövas när man har närmare 40.000 st.

Lägg allt i en tabell som Esuk skrev.

 

Vill du gruppera varorna i olika kategorier gör du detta genom att lägga till en kolumn i tabellen som heter "kategori". På så sätt kan du skilja varor från olika kategorier åt.

 

Det kan verka som att allt kommer blandas ihop genom att lägga allt i en tabell, men med kolumnen "kategori" så är det perfekt åtskilt i olika kategorier.

 

Få inte panik och tänk inte att det är svårt att göra om databasen. Eftersom det inte är det. Skapa nya tomma tabeller och kopiera över innehållet från de nuvarande felaktiga tabellerna med några snygga SQL-satser så fixar det sig. (Gör en säkerhetskopia innan du börjar)

 

Är du mindre bra på datamodellering, dvs databasdesign, så rekomenderar jag att du köper eller lånar en enkel bok om detta och lär dig, och följer sedan, åtminstone de 3 första normaliseringsreglerna.

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

Länk till kommentar
Dela på andra webbplatser

Vad du menar är att jag skall ha en sk. flat databas eller?

 

jag skulle vilja säga att du skall ha en relationsdatabas.

 

Don't Underestimate The Power Of Esuk ...

 

Länk till kommentar
Dela på andra webbplatser

Vad du menar är att jag skall ha en sk. flat databas eller?

Nej. Jag menar relationsdatabas, men att du skall ha alla produkter i en tabell, istället för att dela upp de i 12 olika tabeller.

 

Produktens kategoritillhörighet - vilket är anledningen till att du idag har 12 olika tabeller - styrs av en extra kolumn som heter "kategori" vars innehåll visar vilken kategori produkten tillhör.

 

Sorry om jag varit otydlig....

 

 

Almir - ...

____________________________________________________________

-Läser Programmet för Informatik med Systemvetenskap på MDH, Västerås.-

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Det så jag har nu

En tabell som heter kategori vilken innehåller t.ex (fältnamn)

"FABRIKAT" T.ex HP

"KATEGORI" T.ex Bläckstråle

"MODELL" T.ex Deskjet 710C

"ART1" T.ex 45A (hämtas ut tabellen orgink

"ART2" T.ex 23D (hämtas ur tabellen kompink

osv

 

 

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

Lägg gärna till kategori_id (datatyp int) som identitet och relatera till detta i stället. Då tar det mindre plats i produkttabellen. Går snabbare att söka samt underlättar om du skulle vilja ändra på någon av kategorirubrikerna.

 

Observera att kategori tabellen endast bör innehålla info om själva kategorin och eventuella andra relationer. Ett förslag på hierarki finner du nedan:

 

Kategori (Datorer)

Typ (Bärbara)

Tillverkare (HP),

Produktfamilj (Omnibook),

Produkt (HP Omnibook whatever MHz).

 

Förslag på databasdesign där PK = Primärnyckel:

 

Kategori-tabell;

Kategori_Id INT IDENTITY (PK)

Kategori_Namn VARCHAR(100)Sorteringsordning INT

 

Typ-tabell;

Typ_Id INT IDENTITY (PK)

Typ_Namn VARCHAR(100)

Kategori_Id INT

Sorteringsordning INT

 

Tillverkare;

Tillverkare_Id INT IDENTITY (PK)

Tillverkare VARCHAR(100)

Sorteringsordning INT

 

Produktfamilj;

Familj_Id INT IDENTITY (PK)

Familj_Namn VARCHAR(100)

Typ_Id INT

Tillverkare_Id INT

Ingress VARCHAR(255)

Information VARCHAR(500)

Sorteringsordning INT

 

Produkt;

Produkt_Id INT IDENTITY (PK)

Artikelnr VARCHAR(30)

Namn VARCHAR(100)

Familj_Id INT

Tillverkare_Id INT

Sorteringsordning INT

 

Hoppas att det verkar vettigt för dig.

 

Mvh

 

Jimmy

 

[inlägget ändrat 2002-08-21 21:44:09 av dotgif]

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Riktigt sp bra var jag inte att jag fattade det där, skall tabellerna ha nån relation mellan sig?

Vad är VARCAR, INT, jag jobbar i msaccess

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Relationerna är med i designen, e g kategori_id, typ_id etc.

 

VARCHAR används i SQL Server. Det motsvaras av Text i Access

INT = Number/Long Integer (inga decimaler) i Access

 

Observera att du måsta använda AutoNumber på primärnyckeln i respektive tabell om du vill slippa skriva in nycklarna manuellt.

 

Ett förslag är även att lägga till en produktspec tabell och sedan länka/relatera till Produkt_Id i tabellen Produkt.

 

/Jimmy

 

 

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

nu klarnade det i roten, ska prova detta får vi se, men om jag nu vill hämta de produkter som är specifika för en skrivare, låt säga att det är sex stycken ställer jag då frågan mot vilken tabell? t.ex visa.asp?modell=< %=rs("modell") %>

eller ?

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Hej!

 

En punkt att understryka är att man endast bör ha produkterna på ett ställe (produkttabellen), d v s inte lägga tillbehör för sig och produkter för sig. Om du t ex vill ange att ett tillbehör hör till en viss skrivare kan man t ex i en enklare databas göra en referenstabell (xref) för tillbehören.

 

Referenstabell till Produkter-tabellen:

tillbehor (namn på tabellen)

tillbehor_product_id INT IDENTITY (PK)

product_id INT (relation till produkttabell)

 

Gör sedan en SELECT med "INNER JOIN" på produkter och tillbehor med villkoret Produkter.Product_Id = Tillbehor.Product_Id

 

Observera att det finns ett otal sätt att lägga upp referenser/relationer. Beror helt på behoven. Ett förslag är helt klart att dels läsa mer om relationsdatabaser samt kolla på andra databaser, t ex den medföljande Northwind databasen. Det här är bara en enklare design, men det är i alla fall en start.

 

 

God kväll,

 

Jimmy

 

[inlägget ändrat 2002-08-21 22:51:43 av dotgif]

Länk till kommentar
Dela på andra webbplatser

En sak att tänka på. Oftast hör ett tillbehör till en produktfamilj i stället för enstaka produkter, så man kan t ex göra en tabell som innehåller följande:

 

passar_till;

familj_id int (PK)

product_id int (PK

(markera båda och högerklicka)

 

Mycket på en gång ;)

 

Häpp,

 

Jimmy

 

 

Länk till kommentar
Dela på andra webbplatser

Patronbutiken

Har provat och gjort en accessbas med de tabellerna jag behöver, Det enda problemet är att sista tabellen, den med produkterna gör dubbletter av artiklar ju mer skrivare jag skriver in som har samma produkter.

Databasen finns på www.skived.nu/artiklar.mdb

i fall nån vill kolla

Mvh Peter

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...