Avatar billede zentral Nybegynder
14. maj 2012 - 10:21 Der er 9 kommentarer og
1 løsning

SELECT by NEWID

Jeg vil gerne lave et udtræk som dette

SELECT TOP(4) * FROM tblBlaBla ORDER BY NEWID()

De 4 rows jeg henter ud, vil jeg tildele et HIT

UPDATE tblBlaBla SET Hits += 1 WHERE ???????

Opsummering ... Hent 4 random rows, og update dem med et hit...
Kan ik lige gennemskue den smarteste måde at gøre det på i en Stored Procedure ...
Avatar billede majbom Novice
14. maj 2012 - 10:26 #1
UPDATE tblBlaBla SET Hits = Hits + 1 WHERE id IN(SELECT TOP 4 FROM tblBlaBla ORDER BY NEWID())
Avatar billede zentral Nybegynder
14. maj 2012 - 10:59 #2
Den er rigtig god den der .. men jeg skal også have de 4 samme rows ud ... så de ska både updates og derefter selected ud ...
Avatar billede majbom Novice
14. maj 2012 - 16:50 #3
hvordan selectes ud?
hvad skal du med dem bagefter?
Avatar billede zentral Nybegynder
15. maj 2012 - 09:32 #4
Formålet er at jeg vil random udvælge 4 rows, som bruges til 4 annoncer, de skal have sat et HIT hver, samtidig med de hentes ud ...

Kan man ikke gemme den NEWID() i en variable, og bruge den på en måde ?? Jeg har forsøgt at lave følgende ..

-------------------------------

DECLARE @GetNewID UNIQUEIDENTIFIER
SET @GetNewID = NEWID()

UPDATE tblEvents SET EventShowsBanner += 1 WHERE EventID IN (SELECT TOP(4) * FROM tblEvents ORDER BY @GetNewID)

SELECT TOP(4) * FROM tblEvents ORDER BY @GetNewID

-------------------------------

Men den brokker sig over den ORDER BY
Avatar billede zentral Nybegynder
15. maj 2012 - 09:40 #5
Hov ved godt den select i updaten ska hente EventID og ik *
Avatar billede janus_007 Nybegynder
16. maj 2012 - 21:07 #6
Det kan du gøre på 2 måder vil jeg mene :)

declare @updatedRow as table (EventID int, EventShowsBanner varchar(25))

update tblEvents set EventShowsBanner = EventShowsBanner + 1
output inserted.EventID, output.EventShowsBanner
    into @updatedRow (EventID, EventShowsBanner)
where EventId in(select top 4 EventId from tblEvents order by newid())

En anden måde, som jeg ikke er helt sikker på :)
;with cte as
(
select top 4 * from tblEvents order by newid()
)
update cte set EventShowsBanner = EventShowsBanner + 1
select * from cte
Avatar billede zentral Nybegynder
17. maj 2012 - 14:07 #7
janus_007 ... Din første løsning virker helt kanon ... !!!
Post et svar og du får points :)
Avatar billede janus_007 Nybegynder
17. maj 2012 - 15:28 #8
Super :)

Virkede forslag 2 forresten?
Avatar billede zentral Nybegynder
17. maj 2012 - 17:52 #9
Nej .. Jeg går en fejl..  Invalid object name 'cte'.
Avatar billede janus_007 Nybegynder
17. maj 2012 - 19:42 #10
Yes.. tænkte nok noget lignende, well... et forsøg værd :)
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