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

WRInaute discret
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 !! ^^
 
WRInaute impliqué
à 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.
 
WRInaute discret
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 !! ^^
 
Discussions similaires
Haut