Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

tri aleatoire

3 réponses
Avatar
Steph
Bonjour, je dispose d'une table avec plus de 100 milles entrées.
Je dois afficher chaque jour, suite à une recherche multi-critères ces
entrées dans un ordre différent. En sachant que pendant toute la journée
les offres seront toujours afficher (selon le résultat du moteur de
recherche) dans le même ordre.

Pour ce faire, j'ai ajouter à ma table une colonne "orderby", puis je
recupere aleatoirement la liste de toutes mes entrées dans un ordre
aléatoire et avec un cursor je met a jour le colonne "orderby" en
fonction de la ligne en cours :

DECLARE @vbl int,@ID uniqueidentifier
SET @vbl=0;
DECLARE c CURSOR FOR
select ID from matable ORDER BY NEWID()
OPEN c ;
FETCH NEXT FROM c INTO @ID;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @vbl = @vbl +1
UPDATE matable SET ORDERBY=@vbl WHERE ID=@ID;
FETCH NEXT FROM c INTO @ID;
END
CLOSE c ;
DEALLOCATE c ;



tout fonctionne sauf que ... n'y a t il pas plus simple ?

thanks

3 réponses

Avatar
Yann L'ARVOR
Pour un tri aléatoire :
SELECT * FROM liste order by newid()



"Steph" a écrit dans le message de news:
4821fb88$0$866$
Bonjour, je dispose d'une table avec plus de 100 milles entrées.
Je dois afficher chaque jour, suite à une recherche multi-critères ces
entrées dans un ordre différent. En sachant que pendant toute la journée
les offres seront toujours afficher (selon le résultat du moteur de
recherche) dans le même ordre.

Pour ce faire, j'ai ajouter à ma table une colonne "orderby", puis je
recupere aleatoirement la liste de toutes mes entrées dans un ordre
aléatoire et avec un cursor je met a jour le colonne "orderby" en fonction
de la ligne en cours :

DECLARE @vbl int,@ID uniqueidentifier
SET @vbl=0;
DECLARE c CURSOR FOR
select ID from matable ORDER BY NEWID()
OPEN c ;
FETCH NEXT FROM c INTO @ID;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @vbl = @vbl +1
UPDATE matable SET ORDERBY=@vbl WHERE ID=@ID;
FETCH NEXT FROM c INTO @ID;
END
CLOSE c ;
DEALLOCATE c ;



tout fonctionne sauf que ... n'y a t il pas plus simple ?

thanks


Avatar
Steph
Yann L'ARVOR wrote:
Pour un tri aléatoire :
SELECT * FROM liste order by newid()




:) c'est ce que je fais, sauf que cette methode te retourne a chaque
fois une liste différente, tandis que je souheterai qu'elle soit
identique pendant tout le temps que j'aurai choisi (voir mon script qui
marche parfaitement, sauf que peut etre... il y a plus simple pour
mettre a jour les infos).




"Steph" a écrit dans le message de news:
4821fb88$0$866$
Bonjour, je dispose d'une table avec plus de 100 milles entrées.
Je dois afficher chaque jour, suite à une recherche multi-critères ces
entrées dans un ordre différent. En sachant que pendant toute la journée
les offres seront toujours afficher (selon le résultat du moteur de
recherche) dans le même ordre.

Pour ce faire, j'ai ajouter à ma table une colonne "orderby", puis je
recupere aleatoirement la liste de toutes mes entrées dans un ordre
aléatoire et avec un cursor je met a jour le colonne "orderby" en fonction
de la ligne en cours :

DECLARE @vbl int,@ID uniqueidentifier
SET @vbl=0;
DECLARE c CURSOR FOR
select ID from matable ORDER BY NEWID()
OPEN c ;
FETCH NEXT FROM c INTO @ID;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @vbl = @vbl +1
UPDATE matable SET ORDERBY=@vbl WHERE ID=@ID;
FETCH NEXT FROM c INTO @ID;
END
CLOSE c ;
DEALLOCATE c ;



tout fonctionne sauf que ... n'y a t il pas plus simple ?

thanks






Avatar
bruno reiter
qqchose comme ça :

create table brt1
(
a int identity(1,1) not null,
b nvarchar(99) default 'xx' not null,
ColTri int null
)

insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values
insert brt1 default values

select * from brt1

update brt1
set ColTri = RowNumber
from brt1 w
join ( select a ,ROW_NUMBER() OVER (ORDER BY newid()) AS 'RowNumber'
from brt1 ) as x
on w.a = x.a




BR

"Steph" wrote in message
news:4823fc79$0$837$
Yann L'ARVOR wrote:
Pour un tri aléatoire :
SELECT * FROM liste order by newid()




:) c'est ce que je fais, sauf que cette methode te retourne a chaque fois
une liste différente, tandis que je souheterai qu'elle soit identique
pendant tout le temps que j'aurai choisi (voir mon script qui marche
parfaitement, sauf que peut etre... il y a plus simple pour mettre a jour
les infos).




"Steph" a écrit dans le message de news:
4821fb88$0$866$
Bonjour, je dispose d'une table avec plus de 100 milles entrées.
Je dois afficher chaque jour, suite à une recherche multi-critères ces
entrées dans un ordre différent. En sachant que pendant toute la journée
les offres seront toujours afficher (selon le résultat du moteur de
recherche) dans le même ordre.

Pour ce faire, j'ai ajouter à ma table une colonne "orderby", puis je
recupere aleatoirement la liste de toutes mes entrées dans un ordre
aléatoire et avec un cursor je met a jour le colonne "orderby" en
fonction de la ligne en cours :

DECLARE @vbl int,@ID uniqueidentifier
SET @vbl=0;
DECLARE c CURSOR FOR
select ID from matable ORDER BY NEWID()
OPEN c ;
FETCH NEXT FROM c INTO @ID;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @vbl = @vbl +1
UPDATE matable SET ORDERBY=@vbl WHERE ID=@ID;
FETCH NEXT FROM c INTO @ID;
END
CLOSE c ;
DEALLOCATE c ;



tout fonctionne sauf que ... n'y a t il pas plus simple ?

thanks