2013-03-19 42 views
2

我想從三個表中獲取數據(照片,相冊,album_photos), 那麼程序在專輯表搜索用戶相冊加入語句限制,然後尋找每一張專輯的album_photos中照片的ID,然後,對於每個ID,通過ID查看照片表中的所有數據。內以三種表

昨天我問了一個這樣的問題:Inner join with 3 tables,但是現在,我認爲問題是不同的,我想知道如何通過inner join增加一個請求限制。

所以,我在此代碼現在的工作:

SELECT a.album_name, a.album_id, c.* 
FROM albums a 
INNER JOIN album_photos b ON a.album_id = b.album_id 
INNER JOIN photos c ON b.photo_id = c.photo_id 
WHERE (
    SELECT COUNT(*) 
    FROM album_photos d 
    WHERE b.album_id = d.album_id 
    AND d.nick = :nick 
) <=5 

好吧,這個代碼選擇的有5張或更少的照片的相冊。我不想讓代碼這樣做,無論這張專輯有多少張照片,我都想用5張照片來展示專輯。

其他人都告訴我,你不能這樣做,我認爲,這是不是這樣,因爲SQL語言是非常複雜的,我認爲我們應該做它的工具。

有什麼辦法以適當的方式做到這一點?

*在上述我把關於輸出數據的示例性我正在共享該鏈接。

+0

請添加示例數據和預期輸出 – 2013-03-19 21:25:04

+0

在我所分享的鏈接,你可以找到輸出預期! – 2013-03-19 21:27:22

回答

1

嘗試改變where子句此:

WHERE (
    SELECT COUNT(*) 
    FROM album_photos d 
    WHERE d.album_id = b.album_id and 
     d.photo_id <= b.photo_id 
    AND d.nick = :nick 
) <= 5 

這計數的照片的數量,從而,不只是在相冊中的照片數。

+0

現在輸出數據有4張照片的限制!我怎樣才能改變它以顯示5最大? – 2013-03-19 21:36:43

+0

@TomiSebastiánJuárez。 。 。我反過來比較了。嘗試修訂版本。順便說一句,你應該學會使用「明智的」別名,比如「a」用於專輯,「p」用於照片。它使SQL更易於閱讀。 – 2013-03-19 21:40:30

+0

是的,我希望學習,這只是爲了工作。你能推薦一些書來學習嗎? 和tahnks爲你清楚答案很好的答案! – 2013-03-19 21:43:16

0

由於album_photos有照片和albumns之間的映射關係,你可以指定的照片數量,通過使用TOP投身於:

SELECT a.album_name, a.album_id, p.* 
FROM albums a 
INNER JOIN album_photos ap ON 
    ap.photo_id = (select top 5 photo_id from album_photos where a.album_id = ap.album_id order by photo_id) 
INNER JOIN photos p ON ap.photo_id = p.photo_id 

通過photo_id子查詢的訂單將確保相同的5(或更少)的照片返回

編輯根據註釋。修改使用MySQL LIMIT,而不是T-SQL TOP

SELECT a.album_name, a.album_id, p.* 
FROM albums a 
INNER JOIN album_photos ap ON 
    ap.photo_id = (select photo_id from album_photos where a.album_id = ap.album_id order by photo_id LIMIT 0, 5) 
INNER JOIN photos p ON ap.photo_id = p.photo_id 
+0

這是針對MySQL的,而不是TSQL。 MySQL使用LIMIT,而不是TOP。 – Adrian 2013-03-19 21:50:47

+0

@Adrian ....羅傑。沒有注意到。我會修改 – MikeTWebb 2013-03-19 21:53:37