mySQL sélectionner à partir d'une liste de sélectionner un autre
Une table afin de :
id | nom | idparent | info 1 | AA | | x 2 | BB | | 3 | CC | | x 4 | DD | 1 | 5 | EE | 1 | 6 | FF | 2 | 7 | GG | 2 | 8 | HH | 3 | 8 | HH | 4
et ce que je veux faire, c'est fait comme ça avec mySQL/PHP :
SELECT id from table where info COMME 'x'
et en PHP
pour je dans chaque résultat de l'id de la première demande : SELECT id, nom from table where idparent = i ORDER BY RAND() LIMIT 1; finpour
par exemple, le résultat pourrait être :
4 |DD 8 |HH
et en raison de la RAND(), le résultat sera peut-être trop :
5 |EE 8 |HH
mais il n'est pas si belle, est-il une possibilité de le faire en une seule requête ?
J'ai essayé plusieurs idée mais sans succès, je n'ai pas énumérer ici, afin de ne pas polluer la compréhension de mon sujet 🙂
Merci d'avance pour votre réponse
vérifier la mise à jour de réponse.
OriginalL'auteur Naeco | 2016-04-02
Vous devez vous connecter pour publier un commentaire.
Voici une solution à l'aide de
sub-queries
, qui n'est valable que pour MySQL, depuis leGROUP BY
comportement de MySQL est une extension de la norme SQL.MySQL solution à l'aide de
GROUP BY
:Solution pour les non-MySQL, par l'allocation de
group rank
avecuser variable
:Juste par curiosité, avez-vous une solution pour une autre base de données SQL, parce que le comportement de "groupe" existent juste pour mySQL.
il est facile. Je suis sur le téléphone. Une façon est d'allouer 1....N pour chaque groupe dans l'intérieur de la sous-requête, et le filtre de sortie 1 dans la requête externe
Coul feriez-vous me donner un exemple de cette idée avec une allocation ? Merci !
sans doute, avec le rang de fonction ( stackoverflow.com/questions/3333665/rank-function-in-mysql ), mais pour les utiliser "EN", la sous-requête doit retourner seulement une ligne....
OriginalL'auteur Dylan Su
Essayez ceci:
SELECT id, name FROM table natural join (SELECT id as idparent FROM table WHERE info LIKE 'x') as T ORDER BY RAND() LIMIT 1;
J'espère que cela va résoudre le problème.
en fait, il est très diifficult un essai sans les données de l'échantillon. Pouvez-vous s'il vous plaît poster un sqlfiddle. Par contre, je vais essayer de trouver quelque chose d'autre.
il suffit de vérifier mes mises à jour de la solution et laissez-moi savoir si cela fonctionne. Juste pour savoir si je suis correct......Je sais que vous avez déjà accepté la réponse.
merci d'essayer. Désolé, ça ne fonctionne pas car la LIMITE des limites de la raison pour la totalité non par idparent.
donc, si je retire
LIMIT 1
ça va fonctionner?OriginalL'auteur geeksal