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 Quiz: Har du koll på det senaste inom processorkylare? 46
- Idag Cooler Master Ncore 100 Max – lättbyggt minstingchassi 8
- Igår Nytt vetenskapligt genombrott kan lösa OLED-inbränning 45
- Igår Microsoft vill göra handhållen Xbox 41
- 26 / 3 Microsoft patenterar teknik för bättre ray tracing-prestanda 27
- Idag Svenska Embracer säljer Gearbox för 4,9 miljarder kronor 12
- Idag Var femte användare har lämnat X sedan Musk tog över 97
- Igår Veckans fråga: Hur gammalt är ditt Steam-konto? 161
- Igår Bluffkampanj sprider sig genom Googles AI-sökfunktion 11
- 26 / 3 82 studenter avstängda för AI-fusk – Uppsala strängast 55
- Quiz: Har du koll på det senaste inom processorkylare?46
- Moderkort Asus Z97 pro 1150 dd31
- Veckans fråga: Hur gammalt är ditt Steam-konto?161
- Dagens fynd — Diskussionstråden49236
- En gamingdator för någon som gärna vill spela spel ett par år.12
- Inet frågar SweClockers – vilken roll spelar designen när du väljer teknikprylar?57
- SweClockers - Marknadsreferenser (läs första inlägget innan du postar!)13888
- Vad spelar du för tillfället?1079
- Ubiquiti Unifi2606
- Bilder på ditt senaste inköp (2024) [inga produktbilder]418
- Säljes Samsung galaxy watch5 pro LTE och Asus harpe ace
- Säljes Utförsäljning: 3 stycken helt nya roomba robotdammsugare säljes till bra pris.
- Säljes Kingston 32GB (2x16GB) DDR5 6000MHz CL36 FURY Beast
- Säljes Gigabyte B650I Aorus Ultra AM5 - garanti
- Säljes apple macbook pro 16 m1 max 32gb ram 1tb ssd
- Säljes Apple iPad Pro 11'' 5G (gen 4)
- Säljes Xbox Series S
- Säljes B550-f/5900x/32gb
- Säljes Xbox Series X
- Säljes AMD 7800X3D - Garanti
- Ny RAM-sparande funktion upptäckt i Microsoft Edge1
- Quiz: Har du koll på det senaste inom processorkylare?47
- Svenska Embracer säljer Gearbox för 4,9 miljarder kronor12
- Cooler Master Ncore 100 Max – lättbyggt minstingchassi8
- Var femte användare har lämnat X sedan Musk tog över97
- Så byter du till gamla Notepad i Windows 1131
- Microsoft Copilot kan snart köras direkt på datorn13
- Stort steg för Windows på ARM: Google släpper optimerat Chrome26
- Nytt vetenskapligt genombrott kan lösa OLED-inbränning45
- Xbox-chef är öppen för fler spelbutiker på konsol23