2009-10-20 5 views
0

Comment utiliser 'LIMIT' dans la requête de base de données mysql en fonction des champs. il suffit de considérer un utilisateur a 10 numéro de téléphone et je voudrais obtenir seulement 5 numéro de téléphone pour cet utilisateur.comment limiter le résultat en fonction des champs

Je voudrais obtenir seulement 5 numéros de téléphone par utilisateur. Non seulement 5 résultats de la base de données?

Répondre

1

Hmmm ... cela devrait être le même (en ce qui concerne votre dernière phrase):

SELECT phone_number FROM phone_numbers WHERE user_id = XX LIMIT 5 

Mais si vous êtes à la recherche d'un sous-sélection dans une autre requête, vous devrez utiliser JOIN et ne peut pas limiter ce JOIN. Ainsi, le chemin à parcourir serait de sélectionner d'abord les utilisateurs, puis - pour chaque utilisateur - de sélectionner 5 numéros de téléphone pour chaque utilisateur.

+0

Y at-il un autre moyen de le résoudre? – joe

+0

Eh bien, probablement la plupart des utilisateurs de SQL souhaitent qu'il y ait un moyen d'incorporer plus d'un résultat de sous-requête dans un seul résultat de requête principale, mais malheureusement il n'y a pas de possibilité ... – RSeidelsohn

1

Vous pouvez utiliser la simulation Mysql "ROW_NUMBER() OVER PARTITION (..)" pour la situation décrite par Augenfeind (si vous créez une jointure et ne sélectionnez pas plus de 5 numéros de téléphone pour chaque utilisateur). Voir ici pour comprendre la logique: http://www.xaprb.com/blog/2005/09/27/simulating-the-sql-row_number-function/

Ce serait quelque chose comme:

SELECT * FROM 
users u JOIN 
(
select l.user_id, l.phone, count(*) as num 
from phones as l 
left outer join phones as r 
    on l.user_id = r.user_id 
    and l.phone >= r.phone 
group by l.user_id, l.phone 
) p 
ON u.user_id=p.user_id AND p.num<=5 

Hope qui aide.

+0

+1 Bonne réponse :-) – joe