webForumDet fria alternativet

Information från 2 tabeller och lite övrigt

ASP

30 svar · 702 visningar · startad av CatZ

Medlem sedan jan. 20022 440 inlägg
Frågan#1

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 :)

Medlem sedan mars 2002777 inlägg
#2

Som jag förstått det hade jag ändrat en hel del i tabellstrukturen innan jag hade fortsatt.

  1. Jag hade brutit ut spelare till en egen tabell. Och pekat med relationer var de hör hemma.

  2. Jag hade också brutit ut disktrikt i en egen tabell, och bara angett ett id för varje lag, dvs ett distriktid.

Medlem sedan jan. 20022 440 inlägg
#3

LAMP skrev:

  1. 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

Medlem sedan jan. 20022 440 inlägg
#4

Relations databaser i all sin ära... men hur skapar man relationerna enkelt i asp ?

Medlem sedan maj 20018 027 inlägg
#5

CatZ skrev:

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.

Medlem sedan mars 20015 287 inlägg
#6

..snudd på grekiska...

Medlem sedan mars 2002777 inlägg
#7

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.

-- distrikt --

distriktId (int 5 primary key)
distriktNamn (varchar 100)

-- lag --

lagId (int 11 primarykey)
lagNamn (varchar 100)
distriktId (int 5)

-- spelare --

spelarId (int 11 primary key)
spelarNamn (varchar 100)
lagId (int 11)

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.

Medlem sedan sep. 200123 inlägg
#8

"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.

Medlem sedan mars 2002777 inlägg
#9

pilos skrev:

"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.

Medlem sedan jan. 20022 440 inlägg
#10

LAMP skrev:

-- distrikt --

distriktId (int 5 primary key)
distriktNamn (varchar 100)

-- lag --

lagId (int 11 primarykey)
lagNamn (varchar 100)
distriktId (int 5)

-- spelare --

spelarId (int 11 primary key)
spelarNamn (varchar 100)
lagId (int 11)

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?

Medlem sedan mars 2002777 inlägg
#11

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.

Medlem sedan maj 20018 027 inlägg
#12

CatZ skrev:

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.

Medlem sedan jan. 20022 440 inlägg
#13

Ojdå man Tackar :) Nu ska jag ta och bygga om databasen helt enkelt :) Det får bli 3 tabeller istället så som LAMP sa så fint :)

Medlem sedan jan. 20022 440 inlägg
#14

Hmm så jag gör det i Access:

DistriktsID - Tal(Fältstorlek=heltal(Primär Nyckel)) ?? Är det så ni menar?

Ska ställa den frågan i Access forumet istället.....

Men nu till den stora frågan, HUR gör jag en "relation" mellan lagID i Spelare tabellen till lagID i Lag tabellen?

Det är fortfarande det som är problemet....

Medlem sedan jan. 20022 440 inlägg
#15

hittade relationer i access... så då ska det funka, nu återstår bara hur tusan man anger att ett Heltal ska ha 5 siffror....

och sedan återstår hur tusan man ska visa sakerna ur de olika tabellerna... har aldrig gjort något sånt här innan....

Kan man använda sig av ADO eller måste man köra med SQL?

Medlem sedan mars 2002777 inlägg
#16

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.

Medlem sedan jan. 20022 440 inlägg
#17

Ja precis, men hur anger jag int 11 ? Jag menar som det är nu är det ett långt heltal bara... är det standardvärdet som ska vara 11 och inte 0 ?

Skulle ställa frågan i Access forumet men det är aldrig någon som svarar där...

Relationerna har jag redan skapat i access

Medlem sedan mars 2002777 inlägg
#18

i ms access kan du inte specificera så exakt, där har du bara kort och långt att välja mellan.

Medlem sedan jan. 20022 440 inlägg
#19

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?

Medlem sedan mars 2002777 inlägg
#20
SELECT distrikt.distriktId, distriktNamn, lagId, lagNamn, lag.distriktId
FROM distrikt
INNER JOIN lag
ON distrikt.distriktId = lag.distriktId

sedan kan du fylla på med vilkor och sortering precis som vanligt
exempel:

WHERE lagId = 23 AND lagNamn = 'Malmö FF'
ORDER BY distriktNamn ASC
261 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)