2013-03-19 65 views
4

我與PHP和PDO的工作,我需要recolect信息加入3個表:內連接有3個表

  • 照片
  • 專輯
  • album_photos

表具有以下結構:

照片:

photo_id (int) 
path  (varchar) 
nick  (varchar) 
date  (timestamp) 

專輯

album_id (int) 
album_name (varchar) 
nick  (varchar) 
date  (timestamp) 

album_photos

album_id (int) 
photo_id (int) 
nick  (varchar) 
date  (timestamp) 

所以,我想告訴所有的5張一個最大的專輯的每一個,當用戶暱稱爲 '老闆'

中顯示如下:

album_name_1: 
[photo_1] 
[photo_2] 
[photo_3] 
[photo_4] 
[photo_5] 

album_name_2: 
[photo_1] 
[photo_2] 
[photo_3] 
[photo_4] 
[photo_5] 

我只知道,這樣的事情可以有內進行加入,但我無法找到我怎麼能有3代表做出來。

有我可以做到這一點的例子或其他幫助?

+0

我想你不能在一個查詢中限制到每張專輯5個。除非有人知道一些聰明的做法。 – 2013-03-19 06:23:18

+0

好吧,如果我不能獲得這個限制,我很麻煩:想象一下album_id = 4有10000張照片鏈接,但我只需要5張,非常昂貴! – 2013-03-19 06:25:28

+0

是的,我說的不是針對所有專輯的一個查詢,而是最有可能是每個專輯的一個查詢。我試圖想辦法。 – 2013-03-19 06:26:58

回答

2
SELECT a.*, c.date 
FROM Album a 
     INNER JOIN Album_Photo b 
      ON a.Album_ID = b.Album_ID 
     INNER JOIN Photo c 
      ON b.Photo_ID = c.Photo_ID 
WHERE c.Nick = 'owner' AND 
     (
      SELECT COUNT(*) 
      FROM album_photo d 
      WHERE b.album_id = d.album_id AND 
       d.nick = 'owner' AND 
       b.date >= d.date 
     ) <= 2 // <<== change this value to 5 
+0

測試你的答案[編輯],我現在有這個代碼: 'SELECT *照片從 相冊中 INNER JOIN album_photos b ON a.album_id = b.album_id INNER JOIN尺寸照片C ON b.photo_id = C .photo_id WHERE c.nick = 'tomirgre' AND ( SELECT COUNT(*)FROM ðalbum_photos WHERE = b.album_id AND d.album_id d.nick = 'tomirgre' )<= 5' 但控制檯說:'#1051 - 未知的表'照片'和桌子照片存在。我錯了什麼? – 2013-03-19 06:43:16

+0

他將照片重命名爲照片,但它只給出相冊ID,但沒有照片.. .. .. – Gautam3164 2013-03-19 06:47:22

+0

@TomiSebastiánJuárez對不起,您沒有提供樣品記錄,我在我的表格 – 2013-03-19 06:48:40

1

嘗試像

"SELECT albums.*,photos.id,photos.path,photo_date as Pht_date 
FROM albums 
    JOIN album_photos 
      ON album_photos.album_id = albums.album_id 
    JOIN photos 
      ON photos.photos_id = album_photos_id 
" 

但你續給個人極限的照片在那裏參與了「加入」否則別指望你需要給個別像

$album_ids = "SELECT album_id FROM albums"; 

然後你需要寫照片查詢鏈接纔可

"SELECT photos.* FROM photos 
WHERE album_photos.album_id in (".$album_ids.") AND album_photos.nick = 'owner' 
JOIN album_photos 
ON album_photos.photo_id = photos.photos_id 
LIMIT 0,10 
" 
+0

它是爲你工作.. ?? – Gautam3164 2013-03-19 06:31:20

1

我認爲這是可以使用存儲過程來解決。使用變量和loops,你可以檢索你想要的記錄。只使用基本的SQL命令時,從相冊中獲取最多5條記錄相當具有挑戰性。有時候,你不能派生出正確的記錄。我建議你使用Stored Proc。 :)