tri aleatoire

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Yann L'ARVOR
Le #11880201
Pour un tri aléatoire :
SELECT * FROM liste order by newid()



"Steph" 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


Steph
Le #11880191
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" 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






bruno reiter
Le #11880171
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" 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" 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







Publicité
Poster une réponse
Anonyme