MYSQL kombinera flere select till en vy *Lösning hittad*

Permalänk
Medlem

MYSQL kombinera flere select till en vy *Lösning hittad*

Jag har alltså en tabell varifrån jag skulle vilja kombinera två olika sökningar till ett resltat (för att sedan räkna dem).

Tabellen ser ut som följande
in_game_player_id, user_id, player_name
1, 0, Pers1
2, 21, Pers2
3, 0, Pers3
4, 6, Pers4
5, 21, Pers2
6, 0, Pers1
7, 21, Pers2

Slutresultatet skulle behöva vara typ:
Player, games
21, 3
Pers1, 2
Pers3, 1
6, 1

Dvs att dom som har ett user_id anges med user id, medans de med user_id=0 skulle anges med spelarnamnet, och dessa då kombinerat med hur många gånger de förekommer i tabellen.

Jag har en query som ser ut som följande:

SELECT player, games FROM
(SELECT player_name AS player, COUNT(*) AS games FROM golf_game_participants WHERE user_id=0) tableA,
(SELECT CAST(user_id AS char(12)) as player, COUNT(*) AS games FROM game_participants WHERE user_id>0) tableB

Detta resulterar i att den säger att player kolumnen inte är unik. Kör jag med bara en subquery åt gången så fungerar det, oberoende vilken av dem jag plockar bort, men tillsammans vill dom inte.

Vad är det jag missar?

Permalänk
Vila i frid
Skrivet av warzo:

Vad är det jag missar?

Tips på vägen, namnge de kolumnerna som returneras Player1, player2, player3, games1, games2 och games3 i de tre urvalen så får du bättre felutpekning. Vill du har mer hjälp exporterar du exempel-db'n. Orkar inte knappa...

Permalänk
Medlem
Skrivet av warzo:

Jag har alltså en tabell varifrån jag skulle vilja kombinera två olika sökningar till ett resltat (för att sedan räkna dem).

Tabellen ser ut som följande
in_game_player_id, user_id, player_name
1, 0, Pers1
2, 21, Pers2
3, 0, Pers3
4, 6, Pers4
5, 21, Pers2
6, 0, Pers1
7, 21, Pers2

Slutresultatet skulle behöva vara typ:
Player, games
21, 3
Pers1, 2
Pers3, 1
6, 1

Dvs att dom som har ett user_id anges med user id, medans de med user_id=0 skulle anges med spelarnamnet, och dessa då kombinerat med hur många gånger de förekommer i tabellen.

Jag har en query som ser ut som följande:

SELECT player, games FROM
(SELECT player_name AS player, COUNT(*) AS games FROM golf_game_participants WHERE user_id=0) tableA,
(SELECT CAST(user_id AS char(12)) as player, COUNT(*) AS games FROM game_participants WHERE user_id>0) tableB

Detta resulterar i att den säger att player kolumnen inte är unik. Kör jag med bara en subquery åt gången så fungerar det, oberoende vilken av dem jag plockar bort, men tillsammans vill dom inte.

Vad är det jag missar?

Kör du alla samtidigt så kanske den blir förvirrad av att du har samma alias på flera fält dvs player. Testa att ändra enligt tidigare svaret så blir det nog bättre.

Det kanske går att använda joins istället för de inre selectsen?
Jag ser inte riktigt vad du försöker göra, hoppas det löser sig. SQL ♡

Permalänk
Medlem
Skrivet av hasenfrasen:

Tips på vägen, namnge de kolumnerna som returneras Player1, player2, player3, games1, games2 och games3 i de tre urvalen så får du bättre felutpekning. Vill du har mer hjälp exporterar du exempel-db'n. Orkar inte knappa...

Jag försökte att ha andra benämningar, men det tyckte den inte heller om, eftersom den inte förstod var kolumnen hörde.

Skrivet av freron:

Kör du alla samtidigt så kanske den blir förvirrad av att du har samma alias på flera fält dvs player. Testa att ändra enligt tidigare svaret så blir det nog bättre.

Det kanske går att använda joins istället för de inre selectsen?
Jag ser inte riktigt vad du försöker göra, hoppas det löser sig. SQL ♡

Jag vill veta hur många gånger en spelare deltagit och ordna dem i fallande ordning, men det finns spelare som deltar med ett user_id och så finns det "anonyma" spelare med bara namn. Söker jag och räknar på enbart "player_name" så kan det vara att någon med user_id har bytt namn och räknas som två olika spelare. Söker jag på bara user_id så kommer alla anonyma att buntas ihop till en enda spelare och således ha spelat många gånger men jag får inte ut vem av dem har spelat mest.

Permalänk
Medlem

Jag har fått det löst, men hade nog gärna förstått varför tidigare query inte ville fungera.

Men för nu så löste jag det med en "UNION".