Как предотвратить, противопоставить или компенсировать пустое поле / NULL (MySQL), возвращающее пустое множество - PullRequest
0 голосов
/ 02 апреля 2009

Я изучаю PHP и MySQL, чтобы овладеть сценариями на стороне сервера и для личного интереса / разработки. Кажется, что первая «программа», выходящая за рамки «Привет, мир», пишет собственный блог.

Это немного за пределами моего понимания, поэтому я подумал, что начну с типа базы данных контактов. Пока все хорошо, но (и всегда есть но!) Я пытаюсь отформатировать презентацию в форме, в которой имя контакта отформатировано как ссылка mailto: *. 1003 *

$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>";

}

Это нормально, пока я не осмелюсь ввести контакт, который не имеет адреса электронной почты в БД, после чего очевидное отсутствие email.contactID, равного contacts.contactID, поднимает голову.

Я понимаю, что я должен быть в состоянии справиться с этим, но ... я не могу думать о том, как (от бессонницы! @. @). Любые предложения будут оценены.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2009

Вы хотите левое (или левое внешнее) соединение.

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 голос
/ 02 апреля 2009

Используйте внешнее объединение для объединения таблиц контактов и электронной почты:

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

Это вернет вам все контакты и их адреса электронной почты, если они есть, другой мудрый адрес будет нулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...