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
- Igår Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord 6
- Igår Rykte: Switch 2 släpps i höst – OLED-variant dröjer 26
- Igår Iphones marknadsandel faller i USA 42
- 25 / 4 Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 79
- 25 / 4 Nu stiger hårddiskpriserna med uppemot 10 procent 21
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord6
- någon som använder Xpenology ? (NAS)3
- Köpråd för ny gaming dator, runt 25k11
- Elbilar - Tråden för intresserade23189
- Vilket VR-headset ska jag köpa?881
- NetonNet varnar om läckta kunduppgifter18
- Oskäligt negativt omdöme Tradera24
- Okänd enhet i enhetshanteraren5
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer26
- Tråden för hörlursgalningar! Lurar, förstärkare, dacs, pads osv osv It´s all here!19835
- Säljes ASUS ROG STRIX GeForce GTX 1080 Ti 11GB Gaming OC
- Säljes Gamingdator, 7800X3D, RTX 4080 Super
- Säljes Samsung Galaxy Tab S9 Wi-Fi
- Köpes 24 eller 27 tum minst 144hz
- Säljes MSI GeForce GTX 1070 GAMING X 8G
- Säljes Garderobsrensning, möss och keycaps
- Säljes Acer 4K 144Hz XB273KGP - Gaming Prylar - Aio
- Säljes Spelkoder säljes
- Köpes NUC - gärna Intel 8th gen (Iris) men allt intressant
- Skänkes i386 Laptop Skänkes!
- Ny caps lock-symbol i Windows förbryllar HP-användare9
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord6
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer26
- NetonNet varnar om läckta kunduppgifter18
- Premiär på SweClockers! Månadens drop med gamingskärm hos Elgiganten62
- IT-bolag: Teknikstrul är största tidsboven idag38
- Därför blockerar Windows 11 24H2 Start‑menyhack39
- Iphones marknadsandel faller i USA42
- Konsumentverket granskar tio nätbutiker som lurat kunder18
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk79
Externa nyheter
Spelnyheter från FZ
- Xbox-försäljningen dök 31 % årets första kvartal igår
- PS Plus-ägare får vänta på Fallout 4-uppdateringen igår
- Spelhelgen knackar på – den kommer med spel! igår
- Switch 2-rykten – Kan släppas 2024, kontrollerna får magnetfästen igår
- People Can Fly har skrotat sitt "banbrytande" action-RPG Project Dagger igår