2013-03-19 78 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。 :)