Присвоение значения по умолчанию пустому вызванному полю базы данных - PullRequest
0 голосов
/ 13 ноября 2010

Я работаю над сайтом социальных сетей, в котором мой родственник является сторонним проектом. Я пишу большую часть этого самостоятельно. Я сделал так, чтобы каждый пользователь хранился в таблице со своими данными (mysql), и я хочу сделать один оператор сравнения, чтобы, если поле пустое, заменить полученную переменную на «Нет данных».

Например: данные лиц

name=john
age=34
mobile number=(empty because it hasnt been entered)

поэтому при получении идентификатора ресурса с помощью функции mysql_func_assoc $ result = mysql_query ($ sql);

$db_field = mysql_fetch_assoc($result);
$szUser_name=$db_field['user_name'];
$szAge=$db_field['user_age'];
$szNumber=$db_field['user_number'];

теперь я хочу, чтобы оператор if распознал пустое поле (что-то вроде if ($ szUser == "" || $ szAge == "" || $ szNumber == "")), а затем автоматически изменил соответствующее поле «Нет данных». Я мог бы просто установить все значения = «Нет данных» выше и переназначить их функцией Assoc, но я ищу аккуратную простую опцию. Заранее спасибо

Ответы [ 4 ]

2 голосов
/ 13 ноября 2010

Может быть, поместить это в функцию, чтобы вы могли повторно использовать код?

function getField($fieldName, $fields, $default="No data") {
   return empty($fields[$fieldName]) ? $default : $fields[$fieldName];
}

Так что

$szNumber=$db_field['user_number'];

становится

$szNumber=getField('user_number', $db_fields);

РЕДАКТИРОВАТЬ: Да, вы 're right

// Nitpick: также добавьте 's' к $ db_field, так как оно содержит несколько полей.Или подумайте о переименовании $ db_row

1 голос
/ 13 ноября 2010

Если ваши «пустые» поля фактически установлены на NULL:

Для чистого решения MySQL вы можете использовать COALESCE для достижения того, что выхочу предположить, что "пустые" поля установлены на NULL.Например:

SELECT COALESCE(`user_name`, 'No data') AS `username` FROM `users`

IFNULL работает аналогичным образом и, вероятно, лучше подходит для этой конкретной работы, чем COALESCE:

SELECT IFNULL(`username`, 'No data') AS `username` FROM `users`

COALESCE может иметь много аргументов и просто возвращает первый NOT NULL аргумент, тогда как IFNULL принимает только два аргумента и принимает первый NOT NULL аргумент.

Если ваши «пустые» поля действительнопустые строки:

Если ваши значения являются пустыми строками, а не NULL, тогда вы можете использовать:

SELECT IF('' = `username`, 'No data', `username`) AS `username` FROM `users`

Для получения дополнительной информации о MySQL IF функция см. Руководство .

Если у вас есть комбинация как пустых строк, так и NULL:

Вы можете использовать:

SELECT IF('' = `username` OR `username` IS NULL, 'No data', `username`) AS `username` FROM `users`
0 голосов
/ 13 ноября 2010

Лучший выбор - выбрать архитектуру на основе MVC для вашего приложения, передать необработанные sql-данные из контроллера в представление и решить, какие данные вывести в части представления. Например, Zend Framework позволяет использовать классы, называемые «помощниками вида», которые будут отображать «Нет данных» вместо пустых строк.

0 голосов
/ 13 ноября 2010

Это обычно тот тип вещей, где вы используете троичный оператор:

$szNumber = (!empty($db_field['user_number'])) ? $db_field['user_number'] : 'No data';

Или вы можете использовать полный блок if / else.

Вы также можете использовать оператор CASE в своем запросе:

SELECT CASE WHEN user_number = '' THEN 'No data' ELSE user_number END AS user_number
FROM yourtable

Но это может затруднить чтение запросов.

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