Avatar billede mcnovy Nybegynder
02. april 2008 - 18:51 Der er 50 kommentarer og
1 løsning

addere 2 rækkers data, og send videre som een. (storage procedure

Hej,

til at starte med, så ved jeg kun meget meget lidt om storage prodedures, og intet af koden, så vær lidt blid :)

jeg har min ms sql database,
den indeholder nogle logs som jeg ligger ind.

disse data er bla.a hvornår nogle brugere er logget på i en session,  hvor længe de har været der, og til sidst et tæller værk.. (tæller værket bliver gemt i en anden tabel, og bliver hentet via en query)

mit problem er når den samme bruger logger på og af flere gange i samme session, og når min asp.net side så henter disse rækker data.
jeg kan lige prøve at illustrere

Query test:

ID    SessionID    Brugernavn      TidOnline(min)  TaellerQuery
1        2          TestPerson1      30              4
2        2          TestPerson1      15              4
3        3          TestPerson1      40              7

Taeller henter nogle data fra en anden tabel, og tæller hvor mange gange den aktion er sket i den givne session, så derfor viser tælleren det samme i både ID 1 og 2

her er det så at det jo ikke står korrekt..
jeg vil gerne have den til at lægge tidonline sammen, hvis man har været logget på mere en een gang (så jeg også kun for een række tilbage, istedet for 2 eller flere), og det er vel noget storage procedures man skal bruge til det, medmindre at der findes nogle bedre metoder..

nogle der kan give en hjælpende hånd,
gerne lidt kode til at komme igang med.. :)

på forhånd tak
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 18:59 #1
Hvis din tabel ser ud som du beskriver, så bør dette giver det ønskede resultat:

SELECT
  MAX(ID) AS ID,
  SessionID,
  Brugernavn,
  SUM(Tidonline) AS Tidonline,
  Taellerquery
FROM NavnetPåDinTabel
GROUP BY SessionID, Brugernavn, Taellerquery

Rækker der har samme sessionid, brugernavn og taellerquery vil blive "klappet sammen". Den række der så returneres, vil indeholde det højeste id af de sammenklappede rækker, og den vil indeholde summen af Tidonline-kolonnen. Håber det giver mening :)
Avatar billede mcnovy Nybegynder
02. april 2008 - 19:27 #2
ja.. det gør det, men det er så ikke en storage procedure,
men blot sådan min query skal se ud ik..?
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 19:30 #3
Jep, Hvis du vil lave det som en Stored Procedure (som jeg går ud fra du mener), så kan du gøre sådan:

CREATE PROCEDURE HentMineData
AS
SELECT
  MAX(ID) AS ID,
  SessionID,
  Brugernavn,
  SUM(Tidonline) AS Tidonline,
  Taellerquery
FROM NavnetPåDinTabel
GROUP BY SessionID, Brugernavn, Taellerquery

Og når du så vil udføre den, kan du sige:
EXEC HentMineData
Avatar billede mcnovy Nybegynder
02. april 2008 - 19:43 #4
den addere også min tæller..
havde også skrevet det forkert kan jeg se, da tælleren ikke kommer fra en query,
men bliver talt i min rækker..

du kan prøve om du kan få mening i min querystring

SELECT DISTINCT
                      Game_PlayerNames.PlayerName, Game_Teams.Team, COUNT(Game_Kills.Attacker) AS Kills, Game_Kills.Gameid,
                      SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played], Game_Kills.Attacker
FROM        Game_Team INNER JOIN
                      Game_Teams ON Game_Team.TeamID = Game_Teams.id INNER JOIN
                      Game_Kills INNER JOIN
                      Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id INNER JOIN
                      Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND Game_Kills.Attacker = Game_Duration.PlayerID ON
                      Game_Team.PlayerID = Game_Kills.Attacker AND Game_Team.GameID = Game_Kills.Gameid
GROUP BY Game_Kills.Gameid, Game_Teams.Team, Game_Kills.Attacker, Game_PlayerNames.PlayerName
HAVING      (Game_Kills.Gameid = @GameID)
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 19:50 #5
Du har lige tabt mig. Den querystring du lige har vist mig, den vil så vidt jeg kan se returnere PlayerName, Team, Kills (hvor kills er en count()).

Hvad er sammenhængen lige med den første query du skrev med TidOnline og SessionID mm?
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 19:53 #6
Jeg forestiller mig at hele din sidste querystring skal "erstatte" det ene kolonnefelt i din første query, som du har kaldt TaellerQuery. Men hvad binder lige rækkerne sammen? Der er jo ikke noget ID i din sidste query, som kan bindes sammen med en SessionID, brugernavn eller andet... Eller er "Brugernavn" = "PlayerName"??
Avatar billede mcnovy Nybegynder
02. april 2008 - 19:56 #7
den første var bare et eksempel, for at have så lidt kolonner at skrive om :)

den jeg lige har skrevet, er den jeg bruger..
og sådan den ser ud..
sorry for forvirringen..
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:02 #8
Haha, jeg forvirrede mig selv :)
Jeg havde helt overset de sidste kolonner du selectede ud, hvoraf SUM'en var. Umiddelbart ser det fornuftigt ud. Virker det som ønsket, eller er der andet galt?
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:09 #9
jamen der er det galt at den både addere min "tidOnline" (Game_Duration) men også min Kill's counter..
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:21 #10
det lyder sgu mystisk. Jeg kan på ingen måde regne ud hvorfor hulen den adderer din kills counter. Du laver en "COUNT(Game_Kills.Attacker) AS Kills". Den vil jo give antallet af rækker hvor der er en Attacker, og ikke en sum. Jeg må nok indrømme, at jeg pt. er blank. Hvis jeg skal komme med flere bud, så bliver jeg nok nødt til at bede om noget test-data. Enten i form af at du forklarer lidt om hvilke rækker der findes i de forskellige tabeller, eller at du viser hvordan alle dine tabeller ser ud (altså hvilke kolonner) samt hvad data der er i dem.

Lige en anden bemærkning. Jeg er lidt i tvivl om hvorvidt du bør smide dine DISTINCT ud. Hvis en person 2 gange har været inde og spille i præcis x tid, så vil kun den ene tælles med. Det kan vel ikke være rigtigt?
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:23 #11
hmm, og så tænker jeg lige igen. Hvis dit første eksempel er en forsimpling af din reelle query, så vil jeg mene du bare skal fjerne COUNT'en omkring Game_Kills.Attacker. Du har jo kolonnen med i Group by, så count'en må i stedet fortælle hvor mange personer der egentlig har en kill, frem for hvor mange kills de enkelte personer har.
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:26 #12
distinct var et forsøg i at få det til at virke som det skal .. :)
men jeg takker da for opmærksomheden, havde nok selv glemt at fjerne den igen..

jeg kan godt begynde at tæske løs med tabeller,
men jeg tænker lidt på om løsningen ikke hedder stored prodecures.. (måtte jo hellere skrive det rigtigt denne gang :) )
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:28 #13
prøv lige det med at fjerne COUNT først.
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:38 #14
vi er enige om at det så skal være en sum_distinct ik...?
ellers så bliver online tiden meget høj
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:41 #15
nu ser den sådanne her ud
SELECT    Game_PlayerNames.PlayerName, Game_Kills.Attacker AS Kills, Game_Kills.Gameid,
                      SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played], Game_Kills.Attacker, Game_Teams.Team
FROM        Game_Team INNER JOIN
                      Game_Teams ON Game_Team.TeamID = Game_Teams.id INNER JOIN
                      Game_Kills INNER JOIN
                      Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id INNER JOIN
                      Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND Game_Kills.Attacker = Game_Duration.PlayerID ON
                      Game_Team.PlayerID = Game_Kills.Attacker AND Game_Team.GameID = Game_Kills.Gameid
GROUP BY Game_PlayerNames.PlayerName, Game_Kills.Attacker, Game_Kills.Gameid, Game_Teams.Team
HAVING      (Game_Kills.Gameid = @GameID)

og sådan her ser min kills ud
10411    196    74,10    9    214    12    40    341    203
10412    196    74,45    1    219    12    34    341    203
10413    196    75,15    1    219    12    37    341    203
10414    196    75,33    1    219    12    40    341    200
10415    196    75,48    1    219    9    55    340    205
10416    196    75,57    1    219    12    40    341    210
10417    196    76,07    8    237    9    64    340    205
10418    196    76,10    1    199    8    140    343    207
10419    196    76,16    1    247    12    30    341    209
10420    196    76,27    9    214    1    40    341    209
10421    196    76,36    8    237    6    56    341    206
10422    196    76,38    1    204    9    10    339    203
10423    196    76,51    1    247    6    30    341    209
10424    196    76,56    8    237    9    77    340    205
10425    196    77,02    1    204    8    10    339    203
10426    196    77,09    1    204    9    10    339    209
10427    196    77,15    1    204    6    10    339    202
10428    196    77,19    1    204    8    10    339    209
10429    196    77,26    12    214    1    56    341    209
10430    196    77,34    8    237    6    56    341    203
10431    196    77,43    8    237    1    56    341    203
10432    196    77,49    9    214    6    55    340    205
10433    196    77,53    1    247    8    30    341    209
10434    196    77,58    12    214    9    56    341    209
10435    196    78,08    12    214    1    56    341    209
10436    196    78,10    8    237    9    56    341    203
10437    196    78,12    6    220    12    30    341    209
10438    196    78,18    1    247    8    30    341    203
10439    196    78,26    1    247    8    30    341    201
10440    196    78,35    12    214    1    56    341    203
10441    196    78,41    9    214    6    40    341    204
10442    196    78,46    12    214    9    56    341    202
10443    196    78,56    8    237    12    56    341    203
10444    196    78,59    1    247    8    30    341    203
10445    196    79,03    1    247    6    30    341    203
10446    196    79,05    9    214    8    40    341    203
10447    196    79,08    9    214    12    40    341    201
10448    196    79,15    1    247    8    29    341    203
10449    196    79,21    1    247    6    30    341    202
10450    196    79,21    12    214    8    56    341    209
10451    196    79,35    9    214    6    40    341    202
10452    196    79,37    1    219    12    40    341    203
10453    196    79,54    1    219    12    39    340    205
10454    196    79,55    1    199    9    49    343    207
10455    196    79,57    6    220    1    30    341    210
10456    196    80,03    8    237    6    56    341    212
10457    196    80,22    1    204    8    10    339    206
10458    196    80,26    6    220    1    30    341    203
10459    196    80,43    1    247    8    30    341    211
10460    196    80,50    1    247    12    30    341    203
10461    196    80,57    1    204    9    10    339    203
10462    196    80,57    1    204    6    10    339    203
10463    196    81,13    1    247    12    30    341    203
10464    196    81,18    8    228    6    77    340    205
10465    196    81,27    1    247    8    30    341    209
10466    196    81,34    8    228    9    28    339    212
10467    196    81,49    8    228    6    64    340    205
10468    196    81,51    12    214    8    56    341    203
10469    196    81,59    12    214    9    56    341    203
10470    196    82,00    8    237    6    44    341    203
10471    196    82,22    12    214    6    30    341    203
10472    196    82,33    1    219    12    40    341    202
10473    196    82,39    6    220    1    30    341    203
10474    196    82,41    9    214    6    40    341    201
10475    196    82,44    1    199    12    81    343    207
10476    196    82,56    12    214    9    77    340    205
10477    196    83,03    1    247    12    135    346    209
10478    196    83,07    8    237    6    33    341    203
10479    196    83,21    8    237    1    56    341    203
10480    196    83,32    1    247    8    30    341    209
10481    196    83,37    9    214    12    40    341    208
10482    196    83,45    1    247    6    137    346    206
10483    196    83,49    1    247    9    30    341    203
10484    196    83,50    8    237    6    56    341    209
10485    196    83,55    9    214    8    40    341    203
10486    196    84,08    8    237    12    77    340    205
10487    196    84,12    8    237    1    56    341    203
10488    196    84,23    9    214    12    55    340    205
10489    196    84,32    9    214    8    40    341    203
10490    196    84,38    1    247    6    30    341    209
10491    196    84,42    8    237    1    56    341    200
10492    196    84,50    8    237    6    77    340    205
10493    196    84,53    1    247    9    30    341    209
10494    196    84,57    1    247    8    30    341    210
10495    196    85,07    8    237    6    56    341    200
10496    196    85,08    1    247    12    30    341    201
10497    196    85,15    1    247    8    30    341    203
10498    196    85,27    1    247    9    30    341    210
10499    196    85,31    8    237    12    56    341    203
10500    196    85,32    6    220    8    41    340    205
10501    196    85,37    8    237    6    56    341    201
10502    196    85,43    1    247    9    30    341    203
10503    196    85,51    9    214    8    40    341    201
10504    196    85,53    8    229    9    230    342    207
10505    196    85,58    1    247    9    30    341    209
10506    196    86,15    1    204    9    10    339    203
10507    196    86,19    6    220    1    30    341    209
10508    196    86,22    1    204    8    10    339    203
10509    196    86,27    1    204    12    10    339    203
10510    196    86,33    1    204    8    10    339    203
10511    196    86,41    1    204    6    10    339    203
10512    196    86,44    1    247    9    135    346    209
10513    196    86,45    12    214    8    56    341    203
10514    196    86,48    8    229    12    66    342    207
10515    196    86,50    1    204    6    10    339    203
10516    196    86,55    1    204    8    10    340    205
10517    196    87,06    1    247    12    30    341    202
10518    196    87,11    1    247    8    30    341    206
10519    196    87,14    6    220    1    30    341    209
10520    196    87,25    9    214    12    40    341    201
10521    196    87,26    6    220    8    30    341    203
10522    196    87,35    1    247    8    30    341    203
10523    196    87,38    6    220    1    30    341    210
10524    196    87,39    8    237    12    56    341    209
10525    196    87,52    9    214    6    40    341    203
10526    196    88,07    6    220    9    30    341    209
10527    196    88,09    1    247    8    30    341    209
10528    196    88,20    8    237    1    56    341    209
10529    196    88,30    9    214    1    40    341    202
10530    196    88,38    9    214    12    40    341    203
10531    196    88,44    1    247    9    30    341    210
10532    196    89,04    9    214    1    40    341    209
10533    196    89,16    8    237    1    53    341    203
10534    196    89,22    8    237    6    56    341    203
10535    196    89,30    1    247    12    30    341    203
10536    196    89,36    9    214    1    39    340    205
10537    196    89,45    1    247    9    41    340    205
10538    196    89,55    6    220    9    30    341    203
10539    196    89,58    9    229    8    191    342    207
10540    196    90,04    8    237    6    56    341    210
10541    196    90,09    1    247    12    30    341    203
10542    196    90,19    8    237    12    56    341    203
10543    196    90,27    1    219    6    30    341    209
10544    196    90,30    9    214    12    40    341    203
10545    196    90,30    8    237    9    36    341    203
10546    196    90,36    8    237    1    56    341    203
10547    196    90,43    9    214    6    40    341    203
10548    196    90,51    12    214    6    56    341    208
10549    196    91,04    1    247    8    30    341    202
10550    196    91,10    8    237    1    54    341    208
10551    196    91,17    12    214    9    56    341    200
10552    196    91,20    9    229    12    249    342    207
10553    196    91,27    1    247    9    30    341    203
10554    196    91,50    8    237    6    56    341    203
10555    196    91,52    1    247    8    30    341    209
10556    196    92,01    12    214    6    77    340    205
10557    196    92,06    9    214    1    40    341    209
10558    196    92,15    9    214    12    40    341    210
10559    196    92,20    9    214    8    40    341    200
10560    196    92,27    1    247    6    30    341    203
10561    196    92,37    8    237    12    56    341    211
10562    196    92,42    9    214    8    40    341    215
10563    196    92,49    9    214    6    40    341    201
10564    196    93,06    9    214    8    40    341    212
10565    196    93,07    12    214    9    56    341    211
10566    196    93,10    9    229    12    191    342    207
10567    196    93,13    1    247    9    30    341    203
10568    196    93,17    8    237    6    56    341    201
10569    196    93,21    1    247    9    30    341    209
10570    196    93,24    8    237    6    56    341    214
10571    196    93,26    1    247    8    30    341    203
10572    196    93,36    8    237    1    77    340    205

sorry for flood
resultatet blev sådan her

    Heinovich    8    196    18,77    8    allies
    Hightower    9    196    20,85    9    allies
    johnblack    12    196    20,93    12    allies
    Blank    1    196    20,93    1    axis
    OleO    6    196    19,20    6    axis
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:44 #16
hvad er kolonne overskrifterne til din Kills?
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:44 #17
skal selvfølgelig lige forklarer tabellen

id      gameid  time  attacker  team  attackee  damage bla bla (ikke vigtige)
10411    196    74,10    9        214    12        40    341    203
10412    196    74,45    1        219    12        34    341    203

time er tidspunket hvor at Kill fandt sted, og har ikke noget med timeonline at gøre.
attacker, angreber (den som skal tælles) attackee bliver ikke brugt..
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 20:47 #18
hov, jeg opdagede lige noget...

Du joiner Kills på, men har ikke en ON klausul:

...INNER JOIN Game_Kills INNER JOIN...

Mon ikke det kunne give for mange kills?
Avatar billede mcnovy Nybegynder
02. april 2008 - 20:56 #19
jeg ved ikke så meget om SQL,
så for at være ærlig, så ved jeg ikke hvad det betyder, og hvad jeg kan gøre ved det :( (men jeg vil meget gerne lærer :) )

Game_Kills er de øverste tabel, og der hvor jeg for alle værdier fra..
betyder det at den ikke skal JOINE ..?

eller hvad skal jeg evt gøre om på..?
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:10 #20
jamen lad os da se hvad vi kan gøre :)

Når man joiner to tabeller, så kan man sige, at man "sætter dem sammen ved siden af hinanden", så man får en samlet større tabel, med flere kolonner. Men for at join'en ved hvilke rækker fra venstre tabel, der hører sammen med dem fra højre, laver man en ON tabel1.id = tabel2.id

Da du har join'et din kills tabel på, uden at have en sådan join, så vil den lave en cross join, som betyder, at hver række i den venstre tabel, bliver matchet op med alle rækkerned fra din højre tabel (din kills). Dvs, at den tabel man får ud af det, kommer til at indeholde alt for mange rækker - og det kan være årsagen til at din count kills ting gav for meget.

Jeg vil tro at du skal lave en

... INNER JOIN Game_Kills ON Game_PlayerNames.id = Game_Kills.attacker AND Game_Kills.team = Game_Team.TeamID
INNER JOIN...


Dette "binder" kills tabellen på via attacker og teamID'et (om det så er det rigtige at gøre, kan jeg så ikke lige svare på - men det er et godt bud i hvert fald).

Og så vil jeg nok gå tilbage til din oprindelige query, hvor dit eneste problem vist var at antal kills var for højt.

Prøv med denne, hvor jeg kun har tilføjet ovenstående ON ... klausul:

SELECT
  Game_PlayerNames.PlayerName,
  Game_Teams.Team,
  COUNT(Game_Kills.Attacker) AS Kills,
  Game_Kills.Gameid,
  SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played],   
  Game_Kills.Attacker
FROM
  Game_Team
  INNER JOIN Game_Teams ON Game_Team.TeamID = Game_Teams.id
  INNER JOIN Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id
  INNER JOIN Game_Kills ON Game_PlayerNames.id = Game_Kills.attacker AND 
    Game_Kills.team = Game_Team.TeamID
  INNER JOIN Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND
    Game_Kills.Attacker = Game_Duration.PlayerID                   
GROUP BY
  Game_Kills.Gameid,
  Game_Teams.Team,
  Game_Kills.Attacker,
  Game_PlayerNames.PlayerName
HAVING  (Game_Kills.Gameid = @GameID)
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:14 #21
smid svar--

den er jo rigtig nok.. (tror jeg)
jeg talte lige igennem, og talene er jo rigtige..

det er mig der har lavet en bøf..

jeg takker tusinde gange, og undskylder.. :|
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:16 #22
hermed et svar :)
Havde jeg kiget lidt grundigere på din querystring fra 1½ time siden, så ville jeg også have set at det var galt... men fordi der var så mange andre "rigtige" joins, så mistænkte jeg ikke lige at det kunne være dér problemet var.
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:17 #23
den du lige er kommet med siger at game_kills_attacker ikke eksistere..??
underligt.. for den findes da..
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:19 #24
jeg er helt noob hvad sql angår,
og dette er lidt et projekt for at lærer det,
så små fejl kan jo ske :)

men man lærer jo af sine fejl.. :)
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:24 #25
game_kills_attacker

skal være

game_kills.attacker

Og ja, små fejl man kæmper længe med, har det heldigvis med at sidde bedre fast bagefter :)
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:35 #26
sorry, slet lige forrige fejl jeg skrev..

se venligst følgene screen
http://peecee.dk/upload/view/107190

det er med din kode
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:40 #27
og igen må jeg undskylde, nu talte jeg lige allesammen igennem, og den laver stadigvæk fejl med at den tæller dobbelt.. (er vidst træt idag..)

men håber vi kan få dit eksempel til at virke.. :)
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:41 #28
Ahh, der var lige blevet introduceret en fejl. Prøv med:

SELECT
  Game_PlayerNames.PlayerName,
  Game_Teams.Team,
  COUNT(Game_Kills.Attacker) AS Kills,
  Game_Kills.Gameid,
  SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played], 
  Game_Kills.Attacker
FROM
  Game_Team
  INNER JOIN Game_Teams ON Game_Team.TeamID = Game_Teams.id
  INNER JOIN Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id
  INNER JOIN Game_Kills ON Game_Kills.team = Game_Team.TeamID
  INNER JOIN Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND
    Game_Kills.Attacker = Game_Duration.PlayerID                 
GROUP BY
  Game_Kills.Gameid,
  Game_Teams.Team,
  Game_Kills.Attacker,
  Game_PlayerNames.PlayerName
HAVING  (Game_Kills.Gameid = @GameID)


Jeg har fjernet "Game_PlayerNames.id = Game_Kills.attacker" fra ON klausulen til kills tabellen.
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:43 #29
haha, nu gik det for stærkt. Jeg glemte lige at bytte rundt på to linjer. Prøv denne i stedet:

SELECT
  Game_PlayerNames.PlayerName,
  Game_Teams.Team,
  COUNT(Game_Kills.Attacker) AS Kills,
  Game_Kills.Gameid,
  SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played],
  Game_Kills.Attacker
FROM
  Game_Team
  INNER JOIN Game_Teams ON Game_Team.TeamID = Game_Teams.id
  INNER JOIN Game_Kills ON Game_Kills.team = Game_Team.TeamID
  INNER JOIN Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id
  INNER JOIN Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND
    Game_Kills.Attacker = Game_Duration.PlayerID               
GROUP BY
  Game_Kills.Gameid,
  Game_Teams.Team,
  Game_Kills.Attacker,
  Game_PlayerNames.PlayerName
HAVING  (Game_Kills.Gameid = @GameID)

Hvis ikke snart vi har den, så bliver jeg jo nødt til at overgive mig, og starte min egen sql server op ;)
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:45 #30
det er den samme fejl den siger
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:46 #31
nu starter jeg sgu lige min server op, og laver et lille test-setup. I'll be back
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:48 #32
INNER JOIN Game_Kills ON Game_Kills.Team = Game_Team.TeamID

vil tro fejlen er der, for der er ikke nogen kolonne som hedder Game_Kills.Team
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:49 #33
hehe.. ok..
det er helt supper..
er rigtig fedt du gider hjælpe så meget:!
det sætter jeg stor pris på
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 21:49 #34
ahh, hehe, ja det er jo også det den skriver. Det havde du bare skrevet i din tidligere kommentar, hvor du beskrev kolonnerne. Hedder den så TeamID måske?
Avatar billede mcnovy Nybegynder
02. april 2008 - 21:54 #35
http://peecee.dk/upload/view/107193

her kan du se hvordan alle tabellerne er sat op (hvor det virker, bortset fra den tæller dobbelt)
men alle navnene er der
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:06 #36
Ud fra tabel-layoutet på billedet, har jeg rettet min sql en smule til, og lavet denne. Den kan i hvert fald køre, men om den giver det korrekte resultat, må du lige teste. Pt. er alle mine tabeller tomme ;)

Prøv denne:


SELECT
  Game_PlayerNames.PlayerName,
  Game_Teams.Team,
  COUNT(Game_Kills.Attacker) AS Kills,
  Game_Kills.Gameid,
  SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played],
  Game_Kills.Attacker
FROM
  Game_Team
  INNER JOIN Game_Teams ON Game_Team.TeamID = Game_Teams.id
  INNER JOIN Game_Kills ON Game_Kills.Attacker = Game_Team.PlayerID
  INNER JOIN Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id
  INNER JOIN Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND
    Game_Kills.Attacker = Game_Duration.PlayerID               
GROUP BY
  Game_Kills.Gameid,
  Game_Teams.Team,
  Game_Kills.Attacker,
  Game_PlayerNames.PlayerName
HAVING  (Game_Kills.Gameid = @GameID)
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:08 #37
det blev ikke rigtigt

    Blank    allies    272    196    20,93    1
    Blank    axis    272    196    20,93    1
    OleO    allies    66    196    19,20    6
    OleO    axis    110    196    19,20    6
    Heinovich    allies    608    196    18,77    8
    Hightower    allies    210    196    20,85    9
    Hightower    axis    30    196    20,85    9
    johnblack    allies    75    196    20,93    12
    johnblack    axis    45    196    20,93    12

hvis der er noget jeg kan sende, så sig endelig til (kan godt være du skal guide mig :) )
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:08 #38
Forresten, det eneste jeg lavede om, er ON klausulen til Game_Kills tingen. Den du havde før som kunne køre, men som gav det forkerte antal - den havde ingen ON klausul. Det tilføjede jeg så tidligere, men med en ugyldig/forkert ON klausul. Den der er lavet nu, bør i hvert fald kunne køre - og med lidt held give det rigtige.
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:14 #39
Så vidt jeg kan se på resultatet, så hører Blank til 2 teams - nemlig "allies" og "axis". Er det korrekt? Det ønskede resultat er det at der kun skal være 1 rækker for hver player, uanset hvor mange teams han spiller i?

Og så kan jeg se at der både bliver selected "Game_Kills.Attacker" ud, samt "COUNT(Game_Kills.Attacker) AS Kills". Jeg vil mene at du skal nøjes med at have COUNT-tingen med, og droppe den sidste kolonne i udtrækket.

Kan du evt komme med et bud på hvad det ønskede/korrekte resultat er? Altså på samme tabel-form, som det du lige har sendt?
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:18 #40
Prøv lige med denne også...


SELECT
  Game_PlayerNames.PlayerName,
  Game_Teams.Team,
  COUNT(Game_Kills.Attacker) AS Kills,
  Game_Kills.Gameid,
  SUM(DISTINCT Game_Duration.Game_Quit - Game_Duration.Game_Join) AS [Time Played],
  Game_Kills.Attacker
FROM
  Game_Team
  INNER JOIN Game_Teams ON Game_Team.TeamID = Game_Teams.id
  INNER JOIN Game_Kills ON Game_Kills.TeamID = Game_Team.GameID
  INNER JOIN Game_PlayerNames ON Game_Kills.Attacker = Game_PlayerNames.id
  INNER JOIN Game_Duration ON Game_Kills.Gameid = Game_Duration.GameID AND
    Game_Kills.Attacker = Game_Duration.PlayerID             
GROUP BY
  Game_Kills.Gameid,
  Game_Teams.Team,
  Game_Kills.Attacker,
  Game_PlayerNames.PlayerName
HAVING  (Game_Kills.Gameid = @GameID)
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:21 #41
team ser sådanne her ud

id      GameID  PlayerID  TeamID
3746    196    4      36
3747    196    9      37
3748    196    8      37
3749    196    6      38
3750    196    1      38
3751    196    12      37

og blank, som er 1 har kun eet teamID,

kan se at fejlen er at du kun tager PlayerID i team, og sammenligner med Attacker,
der skal også sammenlignes med GameID,
når det sker, så kommer samme fejl med at den tæller dobbelt..
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:22 #42
team id findes ikke
Game_Kills ON Game_Kills.TeamID = Game_Team.GameID INNER JOIN

(i dit sidste eksempel)
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:25 #43
Og så kan jeg se at der både bliver selected "Game_Kills.Attacker" ud, samt "COUNT(Game_Kills.Attacker) AS Kills". Jeg vil mene at du skal nøjes med at have COUNT-tingen med, og droppe den sidste kolonne i udtrækket.

jeg bliver nød til at beholde Game_Kills.Attacker (jeg kan udskifte den med PlayerNames.PlayerID, men det betyder vel ikke noget..)
men jeg skal bruge ID'et da det skal sendes videre hvis man vil se detaljer..
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:27 #44
jeg tror du har ret - det bør være lige meget.

Du postede tidligere indholdet af din Kills tabel. Kan det lade sig gi' sig, at du poster indholdet af de andre tabeller også? Eller evt bare et udpluk?
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:27 #45
og det ønskede resultat skulle gerne være
PlayerName        Team      Kills    GameID    Game_Duration
Blank              axis      68    196    20,93
Heinovich      allies    76    196    18,77
Hightower      allies    30    196    20,85
johnblack      allies    15    196    20,93
OleO              axis      22    196    19,20
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:28 #46
hov.. (jeg er træt :( )
PlayerName        Team      Kills    GameID    Game_Duration
Blank              axis      68    196    20,93
Heinovich      allies    36    196    18,77
Hightower      allies    30    196    20,85
johnblack      allies    15    196    20,93
OleO              axis      11    196    19,20

finder dem lige frem
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:28 #47
Sorry, endnu en brøler fra min side. Det var GameID jeg mente på begge sider af = tegnet.
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:30 #48
samme resultat som de andre gange med at den så tæller dobbelt..

jeg kan evt oprette en midlertidig bruger, men så ville jeg nok foretrække at poste brugernavn mm. et andet sted :)
Avatar billede HenrikSjang Nybegynder
02. april 2008 - 22:34 #49
det ville da unægtelig gøre det hele noget nemmere :) Du kan evt. smide info på mail til sjang@sjang.dk eller henrik.davidsen@dba.dk.
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:37 #50
http://peecee.dk/upload/view/107203

der er screens til de brugte tabeller

og her er hele kills listen
10411    196    74,10    9    214    12    40    341    203
10412    196    74,45    1    219    12    34    341    203
10413    196    75,15    1    219    12    37    341    203
10414    196    75,33    1    219    12    40    341    200
10415    196    75,48    1    219    9    55    340    205
10416    196    75,57    1    219    12    40    341    210
10417    196    76,07    8    237    9    64    340    205
10418    196    76,10    1    199    8    140    343    207
10419    196    76,16    1    247    12    30    341    209
10420    196    76,27    9    214    1    40    341    209
10421    196    76,36    8    237    6    56    341    206
10422    196    76,38    1    204    9    10    339    203
10423    196    76,51    1    247    6    30    341    209
10424    196    76,56    8    237    9    77    340    205
10425    196    77,02    1    204    8    10    339    203
10426    196    77,09    1    204    9    10    339    209
10427    196    77,15    1    204    6    10    339    202
10428    196    77,19    1    204    8    10    339    209
10429    196    77,26    12    214    1    56    341    209
10430    196    77,34    8    237    6    56    341    203
10431    196    77,43    8    237    1    56    341    203
10432    196    77,49    9    214    6    55    340    205
10433    196    77,53    1    247    8    30    341    209
10434    196    77,58    12    214    9    56    341    209
10435    196    78,08    12    214    1    56    341    209
10436    196    78,10    8    237    9    56    341    203
10437    196    78,12    6    220    12    30    341    209
10438    196    78,18    1    247    8    30    341    203
10439    196    78,26    1    247    8    30    341    201
10440    196    78,35    12    214    1    56    341    203
10441    196    78,41    9    214    6    40    341    204
10442    196    78,46    12    214    9    56    341    202
10443    196    78,56    8    237    12    56    341    203
10444    196    78,59    1    247    8    30    341    203
10445    196    79,03    1    247    6    30    341    203
10446    196    79,05    9    214    8    40    341    203
10447    196    79,08    9    214    12    40    341    201
10448    196    79,15    1    247    8    29    341    203
10449    196    79,21    1    247    6    30    341    202
10450    196    79,21    12    214    8    56    341    209
10451    196    79,35    9    214    6    40    341    202
10452    196    79,37    1    219    12    40    341    203
10453    196    79,54    1    219    12    39    340    205
10454    196    79,55    1    199    9    49    343    207
10455    196    79,57    6    220    1    30    341    210
10456    196    80,03    8    237    6    56    341    212
10457    196    80,22    1    204    8    10    339    206
10458    196    80,26    6    220    1    30    341    203
10459    196    80,43    1    247    8    30    341    211
10460    196    80,50    1    247    12    30    341    203
10461    196    80,57    1    204    9    10    339    203
10462    196    80,57    1    204    6    10    339    203
10463    196    81,13    1    247    12    30    341    203
10464    196    81,18    8    228    6    77    340    205
10465    196    81,27    1    247    8    30    341    209
10466    196    81,34    8    228    9    28    339    212
10467    196    81,49    8    228    6    64    340    205
10468    196    81,51    12    214    8    56    341    203
10469    196    81,59    12    214    9    56    341    203
10470    196    82,00    8    237    6    44    341    203
10471    196    82,22    12    214    6    30    341    203
10472    196    82,33    1    219    12    40    341    202
10473    196    82,39    6    220    1    30    341    203
10474    196    82,41    9    214    6    40    341    201
10475    196    82,44    1    199    12    81    343    207
10476    196    82,56    12    214    9    77    340    205
10477    196    83,03    1    247    12    135    346    209
10478    196    83,07    8    237    6    33    341    203
10479    196    83,21    8    237    1    56    341    203
10480    196    83,32    1    247    8    30    341    209
10481    196    83,37    9    214    12    40    341    208
10482    196    83,45    1    247    6    137    346    206
10483    196    83,49    1    247    9    30    341    203
10484    196    83,50    8    237    6    56    341    209
10485    196    83,55    9    214    8    40    341    203
10486    196    84,08    8    237    12    77    340    205
10487    196    84,12    8    237    1    56    341    203
10488    196    84,23    9    214    12    55    340    205
10489    196    84,32    9    214    8    40    341    203
10490    196    84,38    1    247    6    30    341    209
10491    196    84,42    8    237    1    56    341    200
10492    196    84,50    8    237    6    77    340    205
10493    196    84,53    1    247    9    30    341    209
10494    196    84,57    1    247    8    30    341    210
10495    196    85,07    8    237    6    56    341    200
10496    196    85,08    1    247    12    30    341    201
10497    196    85,15    1    247    8    30    341    203
10498    196    85,27    1    247    9    30    341    210
10499    196    85,31    8    237    12    56    341    203
10500    196    85,32    6    220    8    41    340    205
10501    196    85,37    8    237    6    56    341    201
10502    196    85,43    1    247    9    30    341    203
10503    196    85,51    9    214    8    40    341    201
10504    196    85,53    8    229    9    230    342    207
10505    196    85,58    1    247    9    30    341    209
10506    196    86,15    1    204    9    10    339    203
10507    196    86,19    6    220    1    30    341    209
10508    196    86,22    1    204    8    10    339    203
10509    196    86,27    1    204    12    10    339    203
10510    196    86,33    1    204    8    10    339    203
10511    196    86,41    1    204    6    10    339    203
10512    196    86,44    1    247    9    135    346    209
10513    196    86,45    12    214    8    56    341    203
10514    196    86,48    8    229    12    66    342    207
10515    196    86,50    1    204    6    10    339    203
10516    196    86,55    1    204    8    10    340    205
10517    196    87,06    1    247    12    30    341    202
10518    196    87,11    1    247    8    30    341    206
10519    196    87,14    6    220    1    30    341    209
10520    196    87,25    9    214    12    40    341    201
10521    196    87,26    6    220    8    30    341    203
10522    196    87,35    1    247    8    30    341    203
10523    196    87,38    6    220    1    30    341    210
10524    196    87,39    8    237    12    56    341    209
10525    196    87,52    9    214    6    40    341    203
10526    196    88,07    6    220    9    30    341    209
10527    196    88,09    1    247    8    30    341    209
10528    196    88,20    8    237    1    56    341    209
10529    196    88,30    9    214    1    40    341    202
10530    196    88,38    9    214    12    40    341    203
10531    196    88,44    1    247    9    30    341    210
10532    196    89,04    9    214    1    40    341    209
10533    196    89,16    8    237    1    53    341    203
10534    196    89,22    8    237    6    56    341    203
10535    196    89,30    1    247    12    30    341    203
10536    196    89,36    9    214    1    39    340    205
10537    196    89,45    1    247    9    41    340    205
10538    196    89,55    6    220    9    30    341    203
10539    196    89,58    9    229    8    191    342    207
10540    196    90,04    8    237    6    56    341    210
10541    196    90,09    1    247    12    30    341    203
10542    196    90,19    8    237    12    56    341    203
10543    196    90,27    1    219    6    30    341    209
10544    196    90,30    9    214    12    40    341    203
10545    196    90,30    8    237    9    36    341    203
10546    196    90,36    8    237    1    56    341    203
10547    196    90,43    9    214    6    40    341    203
10548    196    90,51    12    214    6    56    341    208
10549    196    91,04    1    247    8    30    341    202
10550    196    91,10    8    237    1    54    341    208
10551    196    91,17    12    214    9    56    341    200
10552    196    91,20    9    229    12    249    342    207
10553    196    91,27    1    247    9    30    341    203
10554    196    91,50    8    237    6    56    341    203
10555    196    91,52    1    247    8    30    341    209
10556    196    92,01    12    214    6    77    340    205
10557    196    92,06    9    214    1    40    341    209
10558    196    92,15    9    214    12    40    341    210
10559    196    92,20    9    214    8    40    341    200
10560    196    92,27    1    247    6    30    341    203
10561    196    92,37    8    237    12    56    341    211
10562    196    92,42    9    214    8    40    341    215
10563    196    92,49    9    214    6    40    341    201
10564    196    93,06    9    214    8    40    341    212
10565    196    93,07    12    214    9    56    341    211
10566    196    93,10    9    229    12    191    342    207
10567    196    93,13    1    247    9    30    341    203
10568    196    93,17    8    237    6    56    341    201
10569    196    93,21    1    247    9    30    341    209
10570    196    93,24    8    237    6    56    341    214
10571    196    93,26    1    247    8    30    341    203
10572    196    93,36    8    237    1    77    340    205
Avatar billede mcnovy Nybegynder
02. april 2008 - 22:44 #51
så er der sendt til den første af de nævnte mails :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester