2009-10-20 100 views
0

如何在基于字段的mysql数据库查询中使用'LIMIT'。只要考虑一个用户有10个电话号码,我想只为该用户获得5个电话号码。如何根据字段限制结果

我想每个用户只能得到5个电话号码。不仅有5个数据库结果?

回答

1

嗯...这应该是相同的(关于你的最后一句话):

SELECT phone_number FROM phone_numbers WHERE user_id = XX LIMIT 5 

但是,如果你的另一查询中寻找一个子选择,那么你将不得不使用JOIN并且不能限制这个JOIN。所以要走的路是首先选择用户,然后 - 在每个用户的基础上 - 为每个用户选择5个电话号码。

+0

有没有其他解决方法? – joe 2009-10-20 15:10:50

+0

好吧,可能大多数SQL用户希望有一种方法可以将多个子查询结果合并到一个主查询结果中,但不幸的是没有这种可能性...... – RSeidelsohn 2009-10-21 14:12:06

1

您可以使用“ROW_NUMBER()OVER PARTITION(..)”模拟Augenfeind描述的情况(如果您进行加入并为每个用户选择不超过5个电话号码)。 看到这里,了解逻辑:http://www.xaprb.com/blog/2005/09/27/simulating-the-sql-row_number-function/

这将是这样的:

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 

希望有所帮助。

+0

+1好的答案:-) – joe 2009-10-22 11:57:28