ironheadMedlem sedan mars 20011 346 inlägg Hej!
Jag har en MS SQL 7.0 med en databas som heter Highscore där jag vill lagra poäng & smeknamn för att ha till en topplista från ett spel.
min insert ser ut såhär:
oConn.Execute("INSERT INTO Highscore (score,nick) VALUES('1100','"Pelle"')")
Jag skulle vilja (om det är möjligt) att kolla av om resultatet (score) platsar för "top 20"...om det inte gör det, så gör ingen insert....kan man realisera det i själva SQL-satsen?
LarsGMedlem sedan dec. 200012 464 inlägg Varför har du score som en character? Byt till integer snarast (annars fungerar inte nedanstående).
INSERT INTO Highscore (score,nick)
select distinct 1100,'Pelle'
from Highscore
where 1100 not in (
select top 20 score
from highscore
order by score desc)
ironheadMedlem sedan mars 20011 346 inlägg Skrev fel i koden ang. score.
Problemet med denna selectsats är juh att även om jag byter namn eller är inom top20, så läggs inte resultatet in om jag har samma poäng som någon annan :(
Jag vill att alla resultat inom topp 20 ska läggas in oberoende av nick eller nåt annat.
LarsGMedlem sedan dec. 200012 464 inlägg Jag tänker ju fel
INSERT INTO Highscore (score,nick)
select distinct 1100,'Pelle'
from Highscore
where 1100 >= any (
select top 20 score
from highscore
order by score desc)
ironheadMedlem sedan mars 20011 346 inlägg Problemet är nu att om jag har flera 1200 poäng, så kan jag lägga in hur många poster som helst.
kan man deleta alla utanför top 20 samtidigt?
LarsGMedlem sedan dec. 200012 464 inlägg INSERT INTO Highscore (score,nick)
select distinct 1100,'Pelle'
from Highscore
where 1100 > (select min(score)
from (select top 20 score
from highscore
order by score desc)dt )
ironheadMedlem sedan mars 20011 346 inlägg Jag är superimponerad av din fart & klurighet med SQL-satser, men den lägger fortfarande till flera poster...
Bara det att den lägger max in 20 resultat av samma poäng.
ironheadMedlem sedan mars 20011 346 inlägg Det funkar ju kanonbra, förutom att den lägger in så många poster....Skulle man direkt efter INSERTEN köra en DELETE på alla poster över TOP20 och vidare...
typ:
DELETE FROM Highscore WHERE score < (select top 20 score from highscore order by score desc)
Fast detta funkar juh inte...
LarsGMedlem sedan dec. 200012 464 inlägg Du behöver en primärnyckel. Lägg till en kolumn med identity/datetime.
Vilken post vill du ta bort om det finns flera som har den lägsta highscoren?
Säg att du har en datetime kolumn, då kan du ta bort den post som har lägst highscore och lägst datum med
delete from highscore
where datetimeColumn in (select top 1 datetimeColumn
from highscore order by score,datetimeColumn)
ironheadMedlem sedan mars 20011 346 inlägg
Du behöver en primärnyckel. Lägg till en kolumn med identity/datetime.
Jo, det har jag redan....
Super-mycket tack LarsG :)
ironheadMedlem sedan mars 20011 346 inlägg delete from highscore
where datetimeColumn in (select top 1 datetimeColumn
from highscore order by score,datetimeColumn)
Med denna SQL-sats tar jag väl alltid bort den lägsta?
Om jag bara vill ta bort posterna över 20 räknat i score....hur ska man göra då?
LarsGMedlem sedan dec. 200012 464 inlägg Om du har en identity-kolumn som primärnyckel
delete from highscore
where id not in (select top 20 id
from highscore order by score desc)
ironheadMedlem sedan mars 20011 346 inlägg Absolut lysande....återigen tack!