Kom-pa-TI-bilitet
[php] kan man kolla upp text i en kolumm? mysql
Vet ej riktigt hur jag ska koda detta
Men jag har en sida där man kan registrera sig för att delta i en tävling.
Tabellen ser ut
id
namn
information
tid
deltagare
----------------------
Ett exempel
1
Jaga ankor
Du ska under 50 sekunder jaga 3040 st ankor
2071 - 12 - 24 kl 13:00
janne hulken spiderman batman nisse gunnar
----------------------
På deltagarens egna sida så vill jag att det ska finnas en länk som antingen raderar eller lägger till sitt namn
Så om spiderman trycker på avanmäl så ska spiderman försvinna från "deltagare" men ifall spiderman inte finns i "deltagare" så ska det stå anmäl istället. Och när den klickas så ska spiderman addas till "deltagare"
Går detta eller behöver jag skapa en ny tabell för varje tävling som håller deltagare?
Exempel
--------------------
Tabell Jaga ankor_deltagare
id
namn
Hoppas ni fattar
Du har antagligen redan en tabell som representerar användare (t ex spiderman). Den vanligaste lösningen på ditt problem är att skapa en extra tabell som binder samman användare med en tävling. I sin enklaste form ser den ut så här:
Tävlingsdeltagare
tävlingsid
användarid
constraints
composite primary key: tävlingsid+användarid
foreign key: tävlingsid
foreign key: användarid
En rad i tabellen kopplar samman en användare med en tävling. Med en composite key över tävlingsid + användarid riskerar man inte att skapa dubletter, och genom foreign key-relationen med de båda tabellerna som kopplas samman försäkrar man sig om att relationen existerar.
Att ha det uppdelat på detta vis ger många fördelar när det kommer till sökbarhet. Det är exempelvis en baggis att kolla ifall en viss användare är anmäld till en viss tävling:
select
count(*)
from
tävlingsdeltagare td
where
td.användarid = ?
and
td.tävlingsid = ?
Vilka användare (med namn) som är anmälda till en viss tävling:
select
a.användarid
a.användarnamn
from
tävlingar t
inner join tävlingsdeltagare td on td.tävlingsid = t.tävlingsid
inner join användare a on a.användarid = td.användarid
where
t.tävlingsid = ?
Vilka tävlingar en användare har anmält sig till:
select
t.tävlingsid
t.tävlingsnamn
from
tävlingar t
inner join tävlingsdeltagare td on td.tävlingsid = t.tävlingsid
inner join användare a on a.användarid = td.användarid
where
a.användarid = ?
Du har antagligen redan en tabell som representerar användare (t ex spiderman). Den vanligaste lösningen på ditt problem är att skapa en extra tabell som binder samman användare med en tävling. I sin enklaste form ser den ut så här:
Tävlingsdeltagare
tävlingsid
användarid
constraints
composite primary key: tävlingsid+användarid
foreign key: tävlingsid
foreign key: användarid
En rad i tabellen kopplar samman en användare med en tävling. Med en composite key över tävlingsid + användarid riskerar man inte att skapa dubletter, och genom foreign key-relationen med de båda tabellerna som kopplas samman försäkrar man sig om att relationen existerar.
Att ha det uppdelat på detta vis ger många fördelar när det kommer till sökbarhet. Det är exempelvis en baggis att kolla ifall en viss användare är anmäld till en viss tävling:
select
count(*)
from
tävlingsdeltagare td
where
td.användarid = ?
and
td.tävlingsid = ?
Vilka användare (med namn) som är anmälda till en viss tävling:
select
a.användarid
a.användarnamn
from
tävlingar t
inner join tävlingsdeltagare td on td.tävlingsid = t.tävlingsid
inner join användare a on a.användarid = td.användarid
where
t.tävlingsid = ?
Vilka tävlingar en användare har anmält sig till:
select
t.tävlingsid
t.tävlingsnamn
from
tävlingar t
inner join tävlingsdeltagare td on td.tävlingsid = t.tävlingsid
inner join användare a on a.användarid = td.användarid
where
a.användarid = ?
Tack för den tid du la ner! Inte alls dumt! Tackar
- Idag Intel vill strypa effekten till Raptor Lake ur kartong 16
- Idag SFW! Eleganta ASUS ProArt Z790 och GeForce RTX 4070 Ti Super 10
- Igår Intel Core Ultra 9 285K får lägre klockfrekvens än i9‑14900K 33
- 3 / 5 Rykte: Switch 2 grejar högre bildfrekvenser 16
- 2 / 5 Nästa generations Intel-processorer får nya modellnummer 71
- Idag Nintendo kräver att Github rensar emulator-kod 26
- Idag Efter kritikstormen – inget PSN-krav för Helldivers 2 40
- Igår Nu går det att mäta internethastigheten direkt i Microsoft Edge 18
- Igår Microsoft optimerar Utforskaren och Aktivitetshanteraren 24
- 4 / 5 Valve släpper Proton 9.0 i stabil version 34
- Tips på aio17
- [LEK] Gissa spelet15561
- SFW! Eleganta ASUS ProArt Z790 och GeForce RTX 4070 Ti Super10
- Passar denna laddaren till Samsung Galaxy Tab S90
- Elbilar - Tråden för intresserade23260
- Vilken CPU+moderkort blir handen i handsken för mitt RTX 4060 1080p spelande?17
- Handlare ej uppgivit all fakta vid fordonsköp.16
- Plats för lite gubbgnäll9823
- Snabbkoll: Är FPS eller upplösning viktigast i spel?85
- Bygga nytt smart hus från grunden: Vad ska man tänka på?3
- Säljes Äldre speldator (1080, i7 6700K etc)
- Säljes i7 3770k, Radeon 7970, hel eller i delar
- Säljes HD 560S - ROG Harpe Ace - M3 Pro - Kindle Oasis
- Säljes Äldre gaminglaptop
- Köpes Köpes: RTX 4070 / 32GB DDR5 RAM / 2TB M.2 SSD
- Säljes iPhone XR (64GB - Grå)
- Köpes Köper ordentlig dator
- Säljes Nytt oöppnat MSI 4070 VENTUS 2X OC
- Säljes ASUS PRIME B360M-A + Intel Core i3 9100F 3.6 GHz 6MB
- Bytes LG Ultragear 27GP850-B 180hz mot uppgraderingspaket
- Coop-hackare döms till 13 års fängelse
- Intel vill strypa effekten till Raptor Lake ur kartong16
- Nintendo kräver att Github rensar emulator-kod26
- SFW! Eleganta ASUS ProArt Z790 och GeForce RTX 4070 Ti Super10
- Snabbkoll: Är FPS eller upplösning viktigast i spel?85
- Efter kritikstormen – inget PSN-krav för Helldivers 240
- AI påverkar hur programmering lärs ut29
- Säkerhetsincidenter ska sänka Microsoft-chefers löner18
- Nu går det att mäta internethastigheten direkt i Microsoft Edge18
- Så ska Microsoft säkra upp DNS20