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 11
- Igår Rykte: Switch 2 släpps i höst – OLED-variant dröjer 32
- Igår Iphones marknadsandel faller i USA 43
- 25 / 4 Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 80
- 25 / 4 Nu stiger hårddiskpriserna med uppemot 10 procent 23
- Helgsnack: Är all reklam till ondo?35
- Quiz: Vad kan du om Inet?74
- Premiär! Månadens Drop på SweClockers67
- Testpilot: MSI MPG 271QRX - Färgsprakande OLED i 360 Hz15
- Tankar om ihopplock 33k8
- dator till svågern3
- Windows "uppdaterar" Radeon-drivrutiner till äldre version30
- Övriga Fynd – Diskussionstråd1261
- Var köper man schyssta skjortor för en normal manskropp?0
- Dagens fynd (bara tips, ingen diskussion) — Läs första inlägget först!18423
- Säljes Dell 27" S2721DGFA IPS QHD 165 Hz HDR 2560 x 1440
- Säljes Custom Loop - i9-9900K / 32 GB / 2 TB / RTX 3080 / Win 11
- Skänkes Gitarr Epiphone TC10
- Säljes Gamingdator Ryzen 5600X och RTX 3070
- Köpes Uppgraderingspaket AM4 sökes, även grafikkort.
- Köpes Letar delar till databygge
- Säljes Äldre speldator
- Köpes HDFury AVR Key
- Säljes 16GB 3600Mhz CL15 Trident Z DDR4
- Säljes ASUS ROG STRIX GeForce GTX 1080 Ti 11GB Gaming OC
- Helgsnack: Är all reklam till ondo?35
- Microsoft släpper källkoden till MS‑DOS 4.0010
- Ny caps lock-symbol i Windows förbryllar HP-användare20
- Corsair Platform 6: För dig som inte nöjer dig med Ikea-skrivbord11
- Rykte: Switch 2 släpps i höst – OLED-variant dröjer32
- NetonNet varnar om läckta kunduppgifter22
- Premiär på SweClockers! Månadens drop med gamingskärm hos Elgiganten67
- IT-bolag: Teknikstrul är största tidsboven idag42
- Därför blockerar Windows 11 24H2 Start‑menyhack41
- Iphones marknadsandel faller i USA43