Har ett antal frågor som jag skulle behöva hjälp med svaren på
Fråga 1:
Så ser mina tabeller ut, hur ska jag göra för att hämta LagNamn från tabellen DistriktsLag och LagetsPoäng Från tabellen Matcher?
Fråga 2:
SELECT * FROM Matcher WHERE Distrikt = Norra AND Omg = 1
Jag vet att det sättet inte funkar... finns det något sätt man kan göra ovanstående på?
Fråga 3:
Låt oss titta igen på översikten på tabellerna överst i denna tråden, Jag har LagID i tabellen DistriktsLag, Lagets ID hamnar sedan som HemmaLagID och BortaLagID i tabellen Matcher. Hur omvandlar jag sedan HemmaLagID till HemmaLagets fulla namn? Se fråga 1 typ :)
Jag hade brutit ut spelare till en egen tabell. Och pekat med relationer var de hör hemma.
Jag är övertygad om att du har rätt, men hur skapar jag dessa relationer som du pratar om? det är lixom det som är problemet just nu, struktureringen av tabellerna e ju inte färdig givetvis
Relations databaser i all sin ära... men hur skapar man relationerna enkelt i asp ?
Enkelt. Du gör dem inte i asp. Du gör dem i databasen. Du får definiera upp så kallade "Foreign keys" i en tabell A som refererar till "primary keys" i tabellerna som tabellen A ska referera till.
I din tabell "Matcher" skulle tex "HemmaLagId" och "BortaLagId" vara foreign keys som refererar till "LagId" i tabellen "DistriktsLag".
Sedan håller jag med LAMP om att du borde se över dina tabeller.
Okey, vi tar det från början. Låt oss antaga att vi har en massa distrikt i sverige som innehåller en massa fotbollslag, och dessa fotbollslag innehåller en massa spelare. För att skapa och normalisera tabeller så att vi kan hämta data enkelt, och så att vi inte lagrar samma information på olika ställen relaterar vi informationen med nycklar (relationer mellan id). Detta skulle kunna se ut så här.
som ni ser så kopplar jag samman tabellerna med idnummer. Då vet jag vilka lag som hör till vilka distrikt och vilka spelare som hör till vilket lag. Dessutom lagrar jag ingen större information dubbelt. OBS jag drog bara till med fältstorleken på en höft, det kan hända att man kan minska dessa betydligt.
"SELECT Matcher.*,DistriktsLag.lagnamn FROM Matcher LEFT JOIN DistriktsLag ON Matcher.HemmaLagID=DistriktsLag.LagID WHERE Matcher.MatchID = 12345"
Borde fungera för att plocka fram all information om matchen med id=12345 och hemmalagets namn.
Visst går det att få fram informationen nu också, men det är inget som man föredrar i längden. Det blir bara jobbigt, besvärligt, prestandakrävande längre fram med en bristfällig databasstruktur.
Vad är alla dessa int 11 primary keys och varchar 100 ?
Ursäkta nybörjaraktigheten, jag förstår vad du menar men fattar inte hur jag ska göra det själv.... och visst innerjoins är smidigt. Skulle nog räcka då belastningen inte kommer vara speciellt stor på databasen. Men jag vill lära mig rätt på en gång :) det är så jobbigt att radera kunskaper och ersätta med nya.
Lamp, menar du att jag ska göra relationen i Access eller?
Det inom parantes är vilken datatyp fältet i tabellen är. Int (integer) är heltal och 11 är hur stort talet får vara och primary key är att fältet är satt som primärnyckel. De fält som är primärnycklar brukar oftast vara av räknartyp.
Varchar är det samma som text i access och 100 är hur många tecken textfältet maximalt får innehålla.
Ja, du kan bygga upp tabellern i designläge i ms access. Det du bär tänka på är att inte lagra samma information på flera ställen. Tankesättet sedan är att du länkar samman tabellerna med id.
Om du börjar med det stora, i mitt exempel distrikt. Ränkarkolumnen i tabellen distrikt fungerar som en länk till distriktId i tabellen lag. Och lagId fungerar som en länk till tabellen spelare med hjälp av fältet lagId i tabellen spelare.
Vad är alla dessa int 11 primary keys och varchar 100 ?
Int 11 = heltal med 11 siffror.
Varchar 100 = sträng med plats för 100 tecken.
Primary key = det id som du identifierar rader med. Sätter du ett fält till "primary key", då kommer databasen garantera åt dig att du aldrig kan ha samma värde på det fältet på två olika rader, dvs du vet alltid att du har unika värden i det fältet. Därmed kan du använda det fältet för att identifiera en rad. Det är därför du i andra tabeller alltid ska välja att referera till en "primary key".
Angående datatyper i fälten så kan det variera med olika databaser. I Oracle hade Int 11 motsvarats av "Number(11,0)". Varchar hade varit samma sak. Du får kolla vad som gäller för din databashanterare.
I ms access kan man dona med en till en relationer, en till många relationer etc. Men så bra kan inte jag ms access. Det viltiga är att de fält du skapar relationer mellan har samma fälttyp t ex int 11 och jämförbart innehåll.
Ok @nders svarade faktiskt på den frågan i access forumet så jag får passa på att be om ursäkt för
CatZ skrev:
Skulle ställa frågan i Access forumet men det är aldrig någon som svarar där...
Då till problemet med SQL satserna, ska jag använda mig av innerjoins eller hur skriver jag SQL satserna nu? Går det Använda ADO?
LAMP låt oss säga att vi använder dina tabeller, hur skulle du skriva för att visa villka spelare som är i villket lag eller villka lag som är i villken division?