2009-10-20 116 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