[MySQL] Liste (select) avec des lignes au hasard

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par JulienV, 23 Octobre 2014.

  1. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    164
    J'aime reçus:
    0
    Bonsoir à tous ! ^^

    Je me casse la tête sur un script et je n'arrive pas à trouver une solution... Peut-être pourriez-vous m'aider ?

    J'ai une table qui se présente sous cette forme :

    id (unique),
    titre (varchar);

    Mon script fait un simple SELECT sur cette table. Jusque là, pas de soucis !

    J'aimerais y ajouter un champ "famille" : certaines lignes auraient une famille, d'autres pas.

    Mon objectif : sélectionner toutes les lignes de cette table, mais sélectionner également de manière aléatoire une seule ligne par famille (une famille ne peut faire ressortir qu'une seule ligne, au hasard).

    Exemple, j'ai la table suivante :

    1, 'FamilleA', 'Titre 1' ;
    2, 'FamilleA', 'Titre 2' ;
    3, 'FamilleB', 'Titre 3' ;
    4, 'FamilleB', 'Titre 4' ;
    5, '', 'Titre 5' ;
    6, '', 'Titre 6';

    Comment faire pour que ma requête me renvoie (aléatoirement) : 1-3-5-6
    Ou : 2-3-5-6
    Ou 2-4-5-6, etc.

    En clair, que toutes les lignes sans famille soient retournées, mais que pour les lignes qui ont une famille, une seule ligne soit retournée (aléatoirement).

    Je me suis penché vers la fonction SQL Disctinct, mais j'ai l'impression que ce n'est pas par là que je dois aller...

    HELP !! Merci par avance !! ^^
     
  2. baud74
    baud74 WRInaute impliqué
    Inscrit:
    21 Juillet 2014
    Messages:
    586
    J'aime reçus:
    0
    à priori, il faut utiliser un UNION, pour concaténer 2 requetes, la 1ère qui retourne les lignes sans famille, la seconde qui retourne une seule ligne par famille, donc avec le distinct.
     
  3. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    164
    J'aime reçus:
    0
    Merci de m'avoir répondu ! ^^

    Je commence à être sur la bonne voie ! :)

    Code:
    SELECT famille, id, titre FROM `matable` where famille='' 
    UNION 
    SELECT DISTINCT famille, id, titre FROM `matable` where famille!='' GROUP BY famille 
    ORDER BY id
    Cette requête m'affiche bien toutes les lignes "sans famille" (NULL), ainsi qu'une seule ligne de chaque famille (pour les lignes qui ont une famille déclarée).

    Seul hic : il prend la première ligne de chaque famille, mais ne gère pas l'aléatoire. J'ai essayé d'ajouter un rand() mais je ne vois pas comment me sortir de là...

    C'est fou comme on peut parfois se prendre la tête avec des fonctions si simples !! ^^
     
  4. JulienV
    JulienV WRInaute discret
    Inscrit:
    18 Mars 2010
    Messages:
    164
    J'aime reçus:
    0
    Personne n'aurait une idée ? Snif !
     
Chargement...
Similar Threads - [MySQL] Liste (select) Forum Date
[résolu][mysql] faire un "NOT LIKE" sur une chaîne contenant des / Développement d'un site Web ou d'une appli mobile 25 Octobre 2014
[MySQL] Requête SELECT et INSERT entre 3 tables liées+Aide Développement d'un site Web ou d'une appli mobile 30 Avril 2014
[MySQL] Nombre d'enregistrements sur des horaires précis Développement d'un site Web ou d'une appli mobile 19 Juillet 2013
[MYSQL] Comment remplacer caractères dans tous les champs de toutes les tables d'une base? Développement d'un site Web ou d'une appli mobile 11 Juillet 2013
[MYSQL] Une sorte de "OR JOIN" ? Développement d'un site Web ou d'une appli mobile 5 Juillet 2013
[MySQL] sélectionner la dernière note pour chaque élève en une seule requète ? Développement d'un site Web ou d'une appli mobile 12 Avril 2012
[Mysql] Requête PDO avec variable php Développement d'un site Web ou d'une appli mobile 16 Février 2012
[Mysql] Requête PDO aléatoire Développement d'un site Web ou d'une appli mobile 7 Février 2012
[MYSQL] Tri par date Développement d'un site Web ou d'une appli mobile 7 Septembre 2011
[MySQL] rechercher une valeur dans un champ sérialisé Développement d'un site Web ou d'une appli mobile 10 Août 2011
  1. Ce site utilise des cookies. En continuant à utiliser ce site, vous acceptez l'utilisation des cookies.
    Rejeter la notice