/ Forside / Teknologi / Udvikling / SQL / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
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




Søg
Reklame
Statistik
Spørgsmål : 177459
Tips : 31964
Nyheder : 719565
Indlæg : 6408195
Brugere : 218881

Månedens bedste
Årets bedste
Sidste års bedste