帮助构建图片库的数据库

时间:2010-11-27 17:51:05

标签: php mysql database

我有两张桌子,

a)专辑

alt text

b)中的图片

alt text

我使用以下查询选择albums.id,albums.cover_picture_id,pictures.url其中albums.cover_picture_id = pictures.id,我想执行以下操作

select all the values from albums,但它也应该参考albums.cover_picture_id来获取pictures.url

我的目的是使用以下SELECT STATEMENT

SELECT 
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums 
JOIN pictures 
ON 
(
albums.cover_picture_id = pictures.id
)

它工作正常但我在这里有一个问题,表实体albums.cover_picture_id可能包含picture.id中不存在的值0所以如果它找到0它将不会获取值,我想要获取所有相册表中的相册,即使它找到0.如何在select语句中添加该子句。

谢谢

2 个答案:

答案 0 :(得分:3)

尝试将JOIN更改为LEFT JOIN,因为您希望包含albums中的所有记录,即使pictures中没有匹配记录:

SELECT 
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums 
LEFT JOIN pictures 
ON 
(
  albums.cover_picture_id = pictures.id
)

答案 1 :(得分:3)

像这样使用LEFT JOIN

SELECT 
albums.id,
albums.cover_picture_id,
pictures.url
FROM albums 
LEFT JOIN pictures 
ON 
(
albums.cover_picture_id = pictures.id
)

摘自维基百科:

  

表A和B的左外连接(或简称左连接)的结果始终包含“左”表(A)的所有记录,即使连接条件未在“”中找到任何匹配记录右“表(B)。这意味着如果ON子句与B中的0(零)记录匹配,则连接仍将在结果中返回一行 - 但在B中的每列中都为NULL。这意味着左外连接返回左边的所有值table,加上右表中的匹配值(如果没有匹配的连接谓词,则为NULL)。如果右表返回一行而左表返回多个匹配行,则右表中的值将对左表中的每个不同行重复。