2011-03-22 178 views
4

我有这个图,它应该说明我的情况我需要参加3个表,我不知道该怎么做这种事情一定的帮助:加入3个三个表

enter image description here

所以我可以去通过这样做检索记录的while循环:

<img src="<?php echo $row['filename']; ?>" alt="" /> 

Album: <?php echo $row['album_name']; ?> 
AlbumID: <?php echo $row['album_id']; ?> 
+0

你要求的SQL语法或建议在加入是否是正确的操作,还是什么? – Pops 2011-03-22 19:34:05

+0

SQL语法很有用,因为我可以一次连接两个表。但是3是我做不到的。对于重申我的问题的人来说,这不是功课。 – MacMac 2011-03-22 19:36:26

回答

6

使用INNER JOIN将防止返回没有图像的相册。 ORDER BY ... DESC将按降序对结果进行排序,但我不确定如何仅返回最后一条记录。这可能需要某种ORDER BY,GROUP BYTOP的组合。

SELECT 
    album_table.album_id, 
    album_table.album_name, 
    images_table.filename 
FROM album_table 
INNER JOIN images_table ON images_table.album_id = album_table.album_id 
WHERE album_table.user_id = uid 
ORDER BY images_table.date DESC 
+0

@markus:我的意思是写INNER JOIN! (编辑来解决这个问题)。即使没有关联的图像,LEFT JOIN也可以用于返回相册。 – 2011-03-22 19:45:29

+0

这是我正在查找的SQL语法。谢谢! – MacMac 2011-03-22 19:45:33

+0

@lolwut:如果你找出只返回**最后一张**图片的语法,请告诉我们。 – 2011-03-22 19:47:18

0

我相信一个INNER JOIN是你在找什么

本网站GIV ES一个很好的例子

http://www.w3schools.com/sql/sql_join_inner.asp

+0

堆栈溢出的许多人不喜欢w3schools,我发现了困难的方式。 – 2011-03-22 19:36:19

+0

是的,我知道。然而,对于许多简单的事情来说,这不是一个很好的来源,它提供了易于阅读的例子 我认为w3schools最大的问题是它已经过时了HTML/CSS部分,而不是MySQL页面。 – 2011-03-22 19:39:47

0

@lolwut:尝试 -

SELECT 
    album_table.album_id, album_table.album_name, images_table.filename 
FROM album_table 
    INNER JOIN images_table ON images_table.album_id = album_table.album_id 
    INNER JOIN users_table ON users_table.uid = album_table.user_id 
WHERE (users_table.uid = ' . $uid . ') 
ORDER BY images_table.date DESC 

$uid应在当前登录的用户的会话...或者你可以留下WHERE条款进行完全,如果你想返回所有用户的信息。

0

实际上,在这种情况下,您只需要连接两个表格(作为一般的经验法则,您所做的联接越少越好)。

由于您知道用户ID,因此您可以直接查询相册表名称。

如果您的users_table碰巧有另一列“user_name”,并且您想搜索该列,那么您需要加入到users表中。

SELECT filename, album_name, album_id 
FROM album_table at, images_table it 
AND at.album_id = it.album_id 
AND at.user_id = $user_id 
+0

为什么你在没有显式连接的情况下编写你的查询? – markus 2011-03-22 19:46:25