|
| Kan man dette? Fra : Magnus |
Dato : 20-02-05 11:42 |
|
Jeg har et felt i MySQL som indeholder fx.
"|256|21|146|248|344|341|340|260|251|343|345| "
Er der en måde hvorpå mag kan gennemløbe alle poster i tabellen som alle
indeholder en serie forskellige tal som denne og få lavet et "hitlist" som
viser hvor mange poster hvert enkelt tal indgår.
Der skal siges at i hver post fremtræder det samme tal aldrig to gange.
Kan jeg få en liste sorteret på hvor mange gange hvert enkelt tal fremgår?
/Magnus
| |
Troels Arvin (20-02-2005)
| Kommentar Fra : Troels Arvin |
Dato : 20-02-05 12:02 |
|
On Sun, 20 Feb 2005 11:41:59 +0100, Magnus wrote:
> Jeg har et felt i MySQL som indeholder fx.
> "|256|21|146|248|344|341|340|260|251|343|345| "
Du bryder første normalform. Og straffes nu...
Hvis du insisterer på at bryde første normalform, overvej da, om du ikke
skulle bryde den på en måde, hvor dine lister i det mindste bliver
kompatible med MySQL's FIND_IN_SET, MAKE_SET og lign. funktioner.
> Er der en måde hvorpå mag kan gennemløbe alle poster i tabellen som
> alle indeholder en serie forskellige tal som denne og få lavet et
> "hitlist" som viser hvor mange poster hvert enkelt tal indgår. Der skal
> siges at i hver post fremtræder det samme tal aldrig to gange.
Jeg kan ikke umiddelbart komme på nogen blot tilnærmelsesvis effektiv
løsning.
Har du mulighed for at omgøre dit databasedesign? I så fald: Læs lidt
om "normalisering".
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Magnus (20-02-2005)
| Kommentar Fra : Magnus |
Dato : 20-02-05 12:52 |
|
>
> Har du mulighed for at omgøre dit databasedesign? I så fald: Læs lidt
> om "normalisering".
>
Ja det er i den forbindelse jeg har mødt mit problem.
Har du et forslag til hvordan jeg kan lave det sådan at jeg har gemt 11
id-numre på de spillere som er med i en startopstilling således at jeg let
kan søge og lave lister på disse startopstillinger og hvor mange gange de
enkelte spillere fremgår osv. til lidt statistik?
/Magnus
| |
Troels Arvin (20-02-2005)
| Kommentar Fra : Troels Arvin |
Dato : 20-02-05 14:05 |
|
On Sun, 20 Feb 2005 12:51:51 +0100, Magnus wrote:
> Har du et forslag til hvordan jeg kan lave det sådan at jeg har gemt 11
> id-numre på de spillere som er med i en startopstilling således at jeg let
> kan søge og lave lister på disse startopstillinger og hvor mange gange de
> enkelte spillere fremgår osv. til lidt statistik?
Nu kender jeg ikke dit databasedesign, vikårene for jeres kampe eller
dine samlede ønsker til funktionalitet, men man kunne fx. forestille sig
noget i stil med det følgende, hvor primærnøgle er angivet med "=======".
select * from match;
match_time | location | club_home | club_guest
========== | ======== | |
---------------------+----------+-------------+-------------
2005-02-13 13:00:00 | Ryparken | FC Ryparken | FC Herlev
2005-02-06 13:00:00 | Herlev | FC Herlev | FC Ryparken
select * from player;
player_id | fullname
========= |
-----------+-----------
1 | Troels
2 | Peter
3 | Birger
4 | Mogens
5 | Brian
6 | Christian
7 | Johnny
8 | Philip
9 | Jørgen
10 | Michael
11 | Knud
12 | Poul
13 | Kurt
"team"-tabellen beskriver holdopstillinger for dit hold:
select * from team;
match_time | location | player_id
========== | ======== | =========
---------------------+----------+-----------
2005-02-13 13:00:00 | Ryparken | 1
2005-02-13 13:00:00 | Ryparken | 3
2005-02-13 13:00:00 | Ryparken | 4
2005-02-13 13:00:00 | Ryparken | 5
2005-02-13 13:00:00 | Ryparken | 6
2005-02-13 13:00:00 | Ryparken | 7
2005-02-13 13:00:00 | Ryparken | 8
2005-02-13 13:00:00 | Ryparken | 9
2005-02-13 13:00:00 | Ryparken | 10
2005-02-13 13:00:00 | Ryparken | 11
2005-02-13 13:00:00 | Ryparken | 12
2005-02-06 13:00:00 | Herlev | 2
2005-02-06 13:00:00 | Herlev | 3
2005-02-06 13:00:00 | Herlev | 4
2005-02-06 13:00:00 | Herlev | 5
2005-02-06 13:00:00 | Herlev | 6
2005-02-06 13:00:00 | Herlev | 7
2005-02-06 13:00:00 | Herlev | 8
2005-02-06 13:00:00 | Herlev | 9
2005-02-06 13:00:00 | Herlev | 10
2005-02-06 13:00:00 | Herlev | 11
2005-02-06 13:00:00 | Herlev | 12
(match_time,location) refererer tabellen "match", og player_id referer
tabellen "player".
Nu kan man finde antallet af kampe, som en spiller har spillet:
SELECT player_id,count(player_id)
FROM team
GROUP BY player_id;
player_id | count
-----------+-------
12 | 2
11 | 2
10 | 2
9 | 2
8 | 2
7 | 2
6 | 2
5 | 2
4 | 2
3 | 2
2 | 1
1 | 1
Og en hitliste kunne fås ved:
SELECT player_id,count,fullname
FROM (
SELECT player_id,count(player_id)
FROM team
GROUP BY player_id
) AS player_rank
NATURAL JOIN player
ORDER BY count DESC, player_id;
player_id | count | fullname
-----------+-------+-----------
3 | 2 | Birger
4 | 2 | Mogens
5 | 2 | Brian
6 | 2 | Christian
7 | 2 | Johnny
8 | 2 | Philip
9 | 2 | Jørgen
10 | 2 | Michael
11 | 2 | Knud
12 | 2 | Poul
1 | 1 | Troels
2 | 1 | Peter
--
Greetings from Troels Arvin, Copenhagen, Denmark
| |
Magnus (20-02-2005)
| Kommentar Fra : Magnus |
Dato : 20-02-05 15:56 |
|
>
> select * from match;
> match_time | location | club_home | club_guest
> ========== | ======== | |
> ---------------------+----------+-------------+-------------
> 2005-02-13 13:00:00 | Ryparken | FC Ryparken | FC Herlev
> 2005-02-06 13:00:00 | Herlev | FC Herlev | FC Ryparken
>
Det er noget lignende jer har nu følgende:
En tabel med kampene:
kampid, kampdato, holdid, mmal, fmal
En tabel med holdene:
holdid, holdnavn
En Kampreport med fakta om kampen:
tilskuere, dommer, træner, (og her startopsillingen som
"|229|21|146|235|25|248|344|341|340|260|343|")
En Kampreportforløb med de hændelser som kommer i kampen:
id, kampid, minut, profil_id, action
Her er så feltet "action" det som indeholder en "kode/kategori" for hvilken
hændelse det er fx. "A" for advarsel, "M" for mål osv.
Her kunne jeg vel så blot oprette 11 poster med "kode/kategori" som "S" som
siger at det er de spillere so indgår i startopstillingen.
Det er vel det der vil være det rigtigste at gøre ellers skal man oprette 11
felter i tabellen "Kampreport" til at indeholde de 11 spillere?
/Magnus
| |
|
|