Kom ihåg mig?
Home Menu

Menu


En annan SQL-fråga...

Ämnesverktyg Visningsalternativ
Oläst 2006-09-22, 10:07 #1
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
mersault mersault är inte uppkopplad
Medlem
 
Reg.datum: Apr 2006
Inlägg: 119
Jag har en databas med inlästa sträcktider (tänk varvtider i F1-race så fattar ni direkt vad jag menar även om det här handlar om orientering .
Jag vill visa ackumulerade tider, placering på sträckan och total placering.
Det rör sig om upp till 20 sträckor och 200 löpare varje visning så det blir en del data.
Jag har därför bestämt mig för att beräkna allt i förväg och lägga det i samma tabell som de inlästa sträcktiderna, jag misstänker att det skulle bli segt att räkna ut det i PHP eftersom det skulle behövas ganska omfattande sortering.
Givetvis finns även fältet sträcka och personid i tabellen så jag vet vilken av sträckorna och vilken person sträcktiden hör till.

Jag vill helst inte göra 40000 updates i databasen när jag skapar totaltider, placering och totalplacering utan är ute efter att lösa varje uppdatering med en enda fråga.

Totaltider lyckades jag lösa med en fråga även om det faktiskt var riktigt knivigt.

Nu är problemet att räkna ut placering (totalplacering blir analogt sen) med en enda fråga. Att sortera resultatet i den ordning jag vill ha går ju att göra, men hur gör jag en update som sparar den "ordningen" också?

Jag skulle vilja göra
UPDATE sträcktider as str SET pl = (SELECT COUNT(*) FROM sträcktider WHERE sträcktider.sträcka = str.sträcka AND sträcktider.tid < str.tid)

men då får jag:
#1093 - You can't specify target table 'sträcktider' for update in FROM clause

Måste problemet kanske lösas genom att skapa temporära tabeller eller skapa procedurer, eller kanske t.om i PHP? De lösningarna hoppades jag att jag skulle slippa, så de har jag inte tittat på ännu. Tacksam för hjälp!
mersault är inte uppkopplad   Svara med citatSvara med citat
Oläst 2006-09-23, 03:15 #2
rib rib är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2005
Inlägg: 12
rib rib är inte uppkopplad
Nykomling
 
Reg.datum: Nov 2005
Inlägg: 12
Det här frågan borde lösa ditt problem:

UPDATE sträcktider
JOIN (
SELECT COUNT(*) counter,
sträcka,
tid
FROM sträcktider
GROUP BY sträcka, tid
) main
ON main.sträcka = sträcktider.sträcka
AND main.tid < sträcktider.tid
SET pl = counter

..med reservation för fel eftersom jag inte har den faktiska databasen framför mig och sqlfrågor ofta måste jobbas fram för att nå det resultat man vill men prova och bygg vidare på det här så ordnar det sig nog!
rib är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 03:11.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017