11
votes

MySQL: limite par un pourcentage du montant des enregistrements?

Disons que j'ai une liste de valeurs, comme ceci: xxx

J'ai besoin du top 10 % de cette liste - J'ai essayé: xxx

mais cela ne fonctionne pas. Le problème est que je ne connais pas le montant des enregistrements avant de faire la requête. Aucune idée?


4 commentaires

Dupliqué possible de Limite de mySQL définie à la chaîne


Dupliqué possible de Convertir la requête SQL Server en MySQL


Meilleure réponse des dups: Stackoverflow.com/Questions/5522433/...


@Tomalak: merci, ça a l'air génial!


4 Réponses :


3
votes

Vous pouvez également essayer avec cela:

SET @amount =(SELECT COUNT(*) FROM page) /10;
PREPARE STMT FROM 'SELECT * FROM page LIMIT ?';
EXECUTE STMT USING @amount;


0 commentaires

16
votes

meilleure réponse que j'ai trouvée: xxx

changer le 10 pour obtenir un pourcentage différent.


0 commentaires

-1
votes

J'ai une alternative qui n'a pas été mentionnée dans les autres réponses: Si vous accédez à partir de n'importe quelle langue où vous avez un accès complet à l'API MySQL (c.-à-d. Pas le MySQL CLI), vous pouvez lancer la requête, poser combien de des rangées, il y aura, puis casser la boucle s'il est temps.

par exemple en python: xxx

Ceci fonctionne uniquement avec mysql_store_result () , pas avec mysql_use_result () , comme ce dernier exige que vous acceptez toujours toutes les lignes nécessaires.

OTOH, le trafic de ma solution pourrait être trop élevé - toutes les lignes doivent être transférées.


0 commentaires

5
votes

Si vous le feriez pour une situation absente ou une situation aléatoire - j'ai commencé à utiliser le style suivant: xxx

Si vous en avez besoin pour être aléatoire mais contrôlable que vous pouvez Utilisez une graine (exemple avec PHP): xxx

enfin - s'il s'agit d'une sorte de chose dont vous avez besoin de contrôle total sur Vous pouvez réellement ajouter une colonne qui contient une valeur aléatoire Chaque fois qu'une ligne est insérée, puis interrogeez-la à l'aide de ce xxx

car cela ne nécessite pas de tri, ni commander par - il est O (n) plutôt que o (n lg n)


1 commentaires

Notez que ces requêtes ne pouvaient rien revenir d'aucun enregistrement à tous (il est simplement que la probabilité de tout enregistrement donné dans les Resultset est de 0,1).