IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

GROUP BY et RAND


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut GROUP BY et RAND
    Bonjour

    j'ai une base "radio" qui contient des morceaux de musiques.
    j'ai des doublons parce qu'il existe des morceaux studio et des live
    je voudrais faire une requete sql qui regroupe les titres et qui tire une ID au hasard.

    Voici la base :
    Array ( [ID] => 2993 [titre] => À L'Envers )
    Array ( [ID] => 3004 [titre] => À L'Envers )
    Array ( [ID] => 3177 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 2100 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 2101 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 2133 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 2162 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 2163 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 3102 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 2973 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 3079 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 2992 [titre] => Appartenir )
    Array ( [ID] => 3096 [titre] => Appartenir )
    Array ( [ID] => 3140 [titre] => Au Bout De Mes Rêves )
    Array ( [ID] => 3185 [titre] => Au Bout De Mes Rêves )
    Array ( [ID] => 3186 [titre] => Au Bout De Mes Rêves )
    Array ( [ID] => 3015 [titre] => Au Bout De Mes Rêves )

    je voudrais que la requête donne
    Array ( [ID] => 2993 [titre] => À L'Envers )
    Array ( [ID] => 2101 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 2973 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 2992 [titre] => Appartenir )
    Array ( [ID] => 3015 [titre] => Au Bout De Mes Rêves )

    mais aussi des variantes comme
    Array ( [ID] => 3004 [titre] => À L'Envers )
    Array ( [ID] => 2133 [titre] => À Nos Actes Manqués )
    Array ( [ID] => 3102 [titre] => À Quoi Tu Sers? )
    Array ( [ID] => 2992 [titre] => Appartenir )
    Array ( [ID] => 3186 [titre] => Au Bout De Mes Rêves )

    en fait les titres sont forcement sélectionnés mais que l'ID soit aléatoire parmi les ID dont le titre est le premier puis le second...

    Merci

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    j'ai déjà par exemple fait la liste des titres en mode unique

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT titre FROM radio WHERE genre = 2 GROUP BY titre ORDER BY titre ASC;

    et par exemple je sais faire pour le premier titre

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ID,titre FROM radio WHERE titre = (SELECT DISTINCT titre FROM radio WHERE genre = 2 GROUP BY titre ORDER BY titre ASC LIMIT 1) ORDER BY RAND() LIMIT 1;

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    Faites simple, récupérez l'identifiant le plus grand ou le plus petit de chaque titre.

    Exemple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select titre, max(id) 
    from radio
    group by titre

    Note : pensez à encadrer le code avec les balises prévues pour (symbole # de la barre d'icones) en ajoutant le type de code, par exemple [CODE=SQL].
    Ça permet d'ajouter automatiquement la coloration syntaxique et de mettre en évidence le code. J'ai modifié votre question pour les ajouter.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    en fait je voudrais vraiment de l'aléatoire pour éviter de toujours écouter la même version

  5. #5
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Avec MySQL 8 et une fonction fenêtrée :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    WITH selection AS (
        SELECT ALL
            ID, titre,
            ROW_NUMBER() OVER (PARTITION BY titre ORDER BY RAND() ASC) AS tirage
        FROM radio
    )
    SELECT ALL ID, titre
    FROM selection
    WHERE tirage = 1
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 34
    Points : 25
    Points
    25
    Par défaut
    merci beaucoup, je teste en rentrant ce midi. J’espère que mon serveur est en sql8

    Encore merci, marche nickel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lier un order by rand et group by
    Par gilles974 dans le forum Requêtes
    Réponses: 13
    Dernier message: 23/01/2009, 11h53
  2. [MySQL 5.0] RAND() inefficace quand utilisation de GROUP BY
    Par Takusen dans le forum Langage SQL
    Réponses: 2
    Dernier message: 05/11/2006, 15h39
  3. [RaveReport] - Bloquer groupe sur une page
    Par muaddib dans le forum Rave
    Réponses: 3
    Dernier message: 25/02/2003, 16h21
  4. gestion des groupes
    Par muaddib dans le forum QuickReport
    Réponses: 3
    Dernier message: 31/12/2002, 11h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo