webForumDet fria alternativet

Lista allt från en tabell grupperat beroende på annan tabell

Databaser & SQL

7 svar · 271 visningar · startad av Obbelix

Medlem sedan okt. 2002257 inlägg
Frågan#1

Nu är jag här igen med mina SQL problem :)

Har en tabell med spelare och sen en tabell som ska hålla koll på vilka spelare som spelar vilka matcher och i vilken "femma".
Går det att få ut datat såhär?

1:a Femman
# | Namn      |Spelar (checkbox)
---------------------
2   Olle        Ja
3   Pelle       Ja
12  Kalle       Ja
13  Nisse       Ja
21  Sven        Ja

2:a Femman
# | Namn      |Spelar (checkbox)
---------------------
6   Olle2       Ja
7   Pelle2      Ja
8   Kalle2      Ja
18  Nisse2      Ja
24  Sven2       Ja

Övriga
# | Namn      |Spelar (checkbox)
---------------------
61  Olle3       Nej
37  Pelle3      Nej

Tabellerna ser ut som följer

game_players (i denna ligger spelarna som spelar aktuell match)

id | game_id | player_id | line (vilken femma)
----------------------------------
1    101       2           1
2    101       3           1
3    101       12          1
4    101       18          2
5    101       24          2
osv...

players (i denna ligger alla spelarna)

id | namn
-------------------------
2    Olle 
3    Pelle 
12   Kalle
18   Nisse2
24   Sven2
osv...

Har helt kört fast hur detta ska gå till. Har testat lite med joins å så och fått ut spelarna som ska spela, men sen vill jag ju lista alla de som inte ska spela. Detta för att man ska kunna via checkboxarna kryssa ur en och kryssa i en annan så de byter plats så att säga.
Detta ska vara "startsidan" till en online-rapportering och då man kommer till sidan först finns ju inga spelare som ska spela utan då ska alla listas i nummerföljd. Därefter får man reda på (av laget/tränaren) vilka som ska spela och i vilken femma.
Efter man klickat i och skrivit i "femma" på de spelarna som ska spela ska det sorteras så som jag skrivit, OM det går?
Använder MSSQL till detta.

Medlem sedan dec. 200012 464 inlägg
#2
select p.player_id,namn,
case when line is null then 'Nej' else 'Ja' end as spelar,line
from players p
left join game_players gp on p.player_id = gp.player_id
and match_id = 101
order by coalesce(line,999)

Att visa spelarna i olika femmor är något som du får hantera i din presentationslogik.

Medlem sedan okt. 2002257 inlägg
#3

Tackar!
Verkar funka helt perfekt. Får testa fullt ut imorrn.

Att visa spelarna i olika femmor är något som du får hantera i din presentationslogik

Ja, det har jag full koll på.

En fråga... Vad betyder "coalesce(line,999)"?

Medlem sedan okt. 2002257 inlägg
#4

Tror jag har läst mig till vad "coalesce(line,999)" betyder.
Den sorterar alltså efter "line" i första hand, men är den "NULL" så tar den "999" och eftersom det troligtvis inte finns 999 femmor så placeras den sist.
Har jag fattat rätt?

Medlem sedan okt. 2002257 inlägg
#5

Nja. Det fungerade inte riktigt som jag hade tänkt, men det kanske inte går heller.
Hade tänkt att i "game_players" tabellen endast ha de spelare som ska spela. Och sen under de lista resterande spelare.
Men om kör den sql-en som jag fick tidigare och kompletterar med en där man får ut alla spelare ur tabellen "players" som inte finns med i "game_players" så skulle det lösa sig. Borde väl gå på nåt sätt, eller?

Medlem sedan okt. 2002257 inlägg
#6

Fyller nu på med en extra fråga som har med detta att göra.

När jag ska få ut spelare som finns i laget, men inte i "game_players" använde jag denna till en början:

SELECT p.* FROM players p
LEFT JOIN game_players gp ON p.id = gp.player_id 
WHERE p.deleted=0 AND p.team_id= xxxx
AND gp.player_id IS NULL"

Men har nu insett att det inte går så bra vid match två typ, för då finns ju redan spelaren i tabellen
Har försökt med att lägga till "AND gp.game_id=xxx" men det blir inga resultat av det.

Nån smart som har nåt förslag?

Medlem sedan dec. 200012 464 inlägg
#7
SELECT p.* FROM players p
LEFT JOIN game_players gp ON p.id = gp.player_id 
AND gp.game_id=xxx
WHERE p.deleted=0 
AND p.team_id= xxxx
AND gp.player_id IS NULL
Medlem sedan okt. 2002257 inlägg
#8

Tack Lars!
Funkar finfint :)

271 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
129 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)