Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


rekursiv sql-fråga eller liknande

Postades av 2008-02-25 03:11:48 - Daniel Regnér, i forum sql-server/msde, Tråden har 14 Kommentarer och lästs av 1632 personer

tjo

nu sitter jag och försöker göra nånting som säkerligen är enklare än jag fattar ;)

Jag har 3 tabeller

tStart
tSpelare_I_Start
tSpelare_I_Start_Serier

tStart har en koppling till sig själv i med fälten startID och AddScoreFrom för att man skall kunna skicka med poäng mellan starter

nu kommer då problemet

om jag har 3 starter som hänger ihop så skall då poängen adderas efterhand
saken är ju den att jag inte vet hur många nivåer det kommer vara och antalet serier varierar även i starterna.

det jag vill lyckas med är att skriva en lagom mängd SQL som tar 1 inparameter, dvs start ID och sen listar:
Spelar ID
serier för starten
summan av samtliga underliggande starter
antalet serier i dessa starter

Anledningen till att jag vill göra på detta sättet är att jag riskerar att drabbas av fel om jag sparar totalvärden på fler ställen än jag redan gör (dvs i tabellen tSpelare_I_Start, där totalen för DEN starten ligger), om nu någon ändrar ett resultat i efterhand så måste man ju då sitta och spara om samtliga efterkommande starter för att det skall bli rätt i slutet




Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-25 10:28:49 - Niklas Jansson

tStart ska representera olika delstarter i en tävling (en serie?)?
Och den har en koppling till sig själv, vad betyder denna koppling?

Min gissning är att du bör ändra så att du istället har en tabell för alla tävlingar, och lägger ett tävlingsid på varje start.


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-25 11:53:07 - Daniel Regnér

för att förtydliga
jag har en tabell som har alla tävlingar
sen i tabellen tStarts har en relation till tTavling
En tävling har X antal starter varav vissa skall få med resultat från tidigare starter i samma tävling
tStarts har sedan en koppling till spelare via en "kopplingstabell" och det är till den jag sedan kopplar serierna.

saken är dock den att man skall kunna visa resultatet start för start


Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-25 12:26:24 - Niklas Jansson

Så vad du har är egentligen ett antal "riktiga starter" A, B, C, och för vissa av starterna, så finns det fler starter, A består egentligen av A1 och A2, B av B1, B2, B3, medan C har en enda start?

Och det du vill ha är då A, B, C, och inte A1, A2, B1, B2, B3, C?


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-25 12:46:25 - Daniel Regnér

tabellen "starter"
StartID
TavlingsID
AntalSerier
AddScoreFrom (koppling till starter.StartID)

Tabellen "spelare i start"
EntryID
StartID
PlayerID

Tabellen "Serier"
SerieID
EntryID
Resultat

Följdaktligen så skall ett startresultat "byggas" av N antal serier ur "Serier"

Så spelarstart A har då en spelare, tillhör en delstart, och har ex vis 6 rader i tabellen Serier

och det jag behöver hämta ut under resans gång är då totala resultatet och antalet spelade serier t.o.m aktuell start

Krångligt ? japp
alternativet är ju att man sparar totaler men då vet jag att man kommer få felaktiga värden eftersom folk då måste spara om start A,B och C om de gjort en resultatändring i en serie tillhörande A



Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-25 12:59:05 - Niklas Jansson

Om jag nu då äntligen har hajat är då mitt förslag att istället lägga upp det enligt:

Starter
====
StartID
TävlingsID

Delstarter
=====
StartID
DelstartsID
AntalSerier

Sen hur man hanterar de två andra är knepigare (fan vet om det inte är det här man håller på med för 4NF, det är ett ovanligt problem.)
En variant är att skippa "SpelareIStart":

Serier
====
SerieID
SpelarID
DelstartsID

Då blir det implicit, är spelaren med i en serie så är den med i starten. En annan variant är att ändå ha med Spelare i start:


SpelareIStart
====
EntryID
StartID
SpelarID

Serier
====
SerieID
SpelarID
DelstartsID

Men då blir det krångligare att se till att Serier vs SpelareIStart inte får anomalier.
Hur som helst tror jag att det här blir enklare och renare i längden.
Då är ju din grundfråga ganska enkel.


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-25 14:29:51 - Daniel Regnér

Jag kastade in spelarID på varje serie nu, det underlättar ju även senare om jag vill ha statistik för en spelare (bara hämta max och avg från serietabellen)

då återstår ju bara frågan hur Queryn bör se ut ;)
jag är helt nollställd just nu


Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-25 14:40:52 - Niklas Jansson

Har du bytt till min variant?
Starter
====
StartID
TävlingsID

Delstarter
=====
StartID
DelstartsID
AntalSerier

Serier
====
SerieID
SpelarID
DelstartsID
Resultat

Observera att starter som bara finns med en gång måste stå först i Starter och sen i Delstarter
Du vill ha ut resultat per start?
1. Hämta ut resultaten för varje kombination spelare, delstart (antar jag?);
SELECT SpelarID, DelstartsID, SUM(Resultat) FROM Serier GROUP BY SpelarID, DelstartsID

2. Släng ihop alla delstarter till en start, något i stil med
SELECT StartID, SpelarID, SUM(Res) FROM (SELECT SpelarID, DelstartsID, SUM(Resultat) AS Res FROM Serier GROUP BY(SpelarID, DelstartsID)) X INNER JOIN DelStarter ON X.DelstartID = Delstarter.DelstartID) GROUP BY StartID, SpelarID

Och sen kan du ytterligare slänga på TävlingsID ett steg upp.


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-25 23:10:35 - Daniel Regnér

Det där funkade ju bra, men hur gör jag då för att jag i tex start B även skall få ut resultatet från start A och i start C få ut resultatet från A+B ?


Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-26 10:46:53 - Niklas Jansson

Eh?
"start B även skall få ut resultatet från start A "
du vill ha ut B + A här?

" i start C få ut resultatet från A+B"
Du vill ha ut A + B här? Eller A+B+C?

Hur som helst var det inte riktigt så det var beskrivet; en delstart kan bara vara del av _en_ start.

Det du beskriver låter som en ganska märklig situation, kan du förklara lite närmare vad det är för något och varför man vill göra så?


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-26 12:00:27 - Daniel Regnér

jag kanske var lite luddig så vi tar det från början
Vi har en bowlingtävling. Denna tävling har X antal "kvalheat". I dessa så spelar varje spelare 6 serier.
(varje spelare spelar minst 2 kvalheat och detta ligger till grund för finalheaten)
kvalheaten skall bara det heatets total visas, men när man sedan kommer till finalheaten så händer det ibland att man tar med sig föregående heats poäng, en slags utslagstävling med andra ord.

Så ett typfall skulle vara nåt i stil med detta för en spelare.
Resultat Finalheat1 = 1000
Resultat Finalheat2= 1500+ Resultat Finalheat1
Resultat Finalheat3= 1300+ Resultat Finalheat1+Resultat Finalheat2

jag har försökt göra livet enklare genom att spara undan totalen för ett heat och sedan hämta upp det till nästa heat och addera det nya resultatet, men den lösningen känns lite instabil med tanke på att man då måste komma ihåg att spara om starter om man gör ändringar, något jag inte är helt övertygad om att användarna kommer göra


Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-26 13:02:40 - Niklas Jansson

Då är min spontana tanke att du ska dela upp det i kval och final. Jag är lite skeptisk till
>så händer det <b>ibland</b> att man tar med sig föregående heats poäng

Hur styrs detta, är det på tävlingsbasis?
Är det alltid samma regler?
Kan det hända att kvalheaten ska blandas in i finalpoängen?


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-26 13:57:33 - Daniel Regnér

jag har tänk som så att ett heat är ett heat oavsett om det är ett kval eller en final eftersom de har samma struktur (X serier och en spelare), starterna är dessutom markerade med ett bit-fält om de är kval eller inte

detta styrs på tävlingsbasis, dvs vilket heat som helst skall kunna hämta resultat från ett tidigare heat
hade jag fått bestämma hade alla tävlingarna haft samma spelsystem, men nu får jag ju inte det ;)


Svara

Sv: rekursiv sql-fråga eller liknande

Postades av 2008-02-26 14:12:56 - Niklas Jansson

Och då börjar vi komma tillbaks till din ursrpungliga ide.

Det är en kreativ uppgift att hitta rätt datamodell, och det är svårt när man inte har all info. Om det bara finns två olika sätt, "använd inte föregående" och "använd föregående" så kan du dela upp det i två grupper, och särbehandla dem. Om det finns mer än de här två sätten, så kan din ursprungliga ide funka, men du får då hemsk kod och måste vara jävligt försiktig så att du inte får loopar...

En sista variant som kan funka och som jag gillar är att byta till en N-till-N-koppling.
1. En serie är alltid del av ett delheat.
1. Ett delheat kan vara del av många olika heat. Delheat A är del av heat A, "heat A+B", och heat "A+B+C" I många fall är delheat samma sak som heat, och det är alltid på hela heat man räknar.
2. Varje heat kan byggas upp av många delheat.


Svara

Sv:rekursiv sql-fråga eller liknande

Postades av 2008-02-26 14:20:18 - Daniel Regnér

Det där var nog en spark i rätt riktning, jag får sätta mig och labba lite med det när jag fixat till min "ful-lösning" som visar rätt resultat, men kräver att man sparar om mellan varven

måste få fram nåt att visa upp typ idag :(

(och klienten skiter i HUR det funkar, bara det funkar ;) )


Svara

Nyligen

  • 14:24 CBD regelbundet?
  • 14:23 CBD regelbundet?
  • 14:22 Har du märkt några verkliga fördel
  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 617
27 953
271 709
5 718
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies