如何防止,计数或补偿返回空集的空/ NULL字段(MySQL)

时间:2009-04-01 20:47:19

标签: php mysql

我正在学习PHP和MySQL,以获得服务器端脚本和个人兴趣/开发。第一个'程序',超越'hello world'似乎是在写自己的博客。

这还有点超出我的想法,所以我想我会从一个contacts-database类型开始。到目前为止一切都那么好,但是(并且总是有!)我正在尝试以联系人姓名格式化为mailto:link的形式格式化演示文稿。

$query = mysql_query("
    SELECT CONCAT(fname,', ',sname) AS name, email.address AS email
    FROM contacts, emails 
    WHERE contacts.contactID=email.contactID");

while ($row = mysql_fetch_array($query)) {

 echo "<li><a href=\"mailto" . $row['email'] . "\"> . $row['name'] . "</a></li>";

}

这很好,直到我敢于在Db中输入没有电子邮件地址的联系人,此时显然缺少一个等于contacts.contactID的email.contactID。

我意识到我应该能够解决这个问题,但是......我想不出怎么样(对于失眠!@。@)。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:2)

你想要一个左(即左外)联接。

select concat(c.fname, ' ', c.sname) as name, e.address as email
from contacts c
left join emails e
on (c.contactID = e.contactID)

答案 1 :(得分:1)

使用外部联接加入联系人和电子邮件表:

SELECT 
      CONCAT(fname,', ',sname) AS name, email.address AS email 
FROM 
    contacts c
    left outer join emails e on (c.contactID = e.contactID)

这将返回所有联系人及其电子邮件地址(如果有),其他明智的地址将为空。