2010-11-13 2 views
0

Je travaille sur une tentative de site de réseau social avec un membre de ma famille en tant que projet parallèle. J'écris la plupart par moi-même. J'ai fait en sorte que chaque utilisateur est stocké dans une table avec leurs données (mysql) et je veux faire une seule déclaration de comparaison de sorte que si un champ est vide pour changer la variable reçue en "Pas de données".Affectation d'une valeur par défaut à un champ vierge de base de données rappelée

Par exemple: les données personnes est

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

donc quand je reçois l'identifiant de ressource avec la fonction 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']; 

maintenant je veux une instruction if pour reconnaître un champ vide (quelque chose comme si (szUser de $ == "" || $ szAge == "" || $ szNumber == "")) puis automatiquement remplacez le champ correspondant par "Aucune donnée". Je pourrais juste placer toutes les valeurs à = "aucune donnée" ci-dessus et les ai réaffectées par la fonction d'assoc, mais im recherchant une option simple ordonnée. Merci à l'avance

+0

Si vous avez utilisé Smarty, il serait simple: '{$ quelque chose | default: » Aucune donnée '} '. –

Répondre

0

Cela est généralement le genre de chose où vous utilisez l'opérateur ternaire:

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

Ou, vous pouvez utiliser pleinement si/bloc d'autre.

Vous pouvez également une instruction CASE dans votre requête:

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

Mais il peut faire des requêtes difficiles à lire.

2

Peut-être mettre cela dans une fonction afin que vous puissiez réutiliser le code?

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

Alors

$szNumber=$db_field['user_number']; 

devient

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

EDIT: Ouais, vous avez raison

// pinailler: Ajouter un 's' à $ db_field et depuis il contient plusieurs champs. Ou envisagez de le renommer $ db_row

+0

merci beaucoup. J'ai vu le code similaire à cela sur certains sites tutoriels, mais je ne savais pas comment l'implémenter –

+0

juste en jouant avec ce code atm, est-ce parenthèse proche censé être à la fin de la deuxième ligne? Je n'essaie pas de vous corriger, je ne sais pas exactement ce que c'est pour –

0

Le meilleur choix est de choisir l'architecture basée sur MVC pour votre application, de transférer les données SQL du contrôleur vers la vue, et de décider quelles données sortir dans la partie vue. Par exemple, Zend Framework permet d'utiliser des classes appelées "view helpers", qui afficheront "No data" au lieu de chaînes vides.

+0

Vous n'avez pas besoin d'implémenter le modèle MVC pour accomplir cela. En fait, il n'a absolument rien à voir avec un motif de conception. – Treffynnon

1

Si vos « vides » les champs sont effectivement mis à NULL:

Pour une solution pure MySQL, vous pouvez utiliser COALESCE pour obtenir ce que vous voulez assumer les champs « vides » sont mis à NULL.Par exemple:

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

IFNULL fonctionne d'une manière similaire et est probablement mieux adapté à ce travail particulier que COALESCE:

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

COALESCE peut avoir de nombreux arguments et renvoie simplement le premier argument NOT NULL alors que IFNULL seulement accepte deux arguments et prend le premier argument NOT NULL.

Si vos « vides » les champs sont en fait des chaînes vides:

Si vos valeurs sont des chaînes vides plutôt que NULL vous pouvez utiliser:

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

Pour plus d'informations sur la fonction MySQL IFsee the manual.

Si vous avez une combinaison des deux chaînes et NULL vides:

Vous pouvez utiliser:

SELECT IF('' = `username` OR `username` IS NULL, 'No data', `username`) AS `username` FROM `users` 
+0

Je veux juste noter que NULL! = '' (Chaîne vide). Et NULL n'est même pas égal à NULL, pour l'enregistrement. C'est pourquoi je n'ai pas suggéré COALESCE, puisque OP a dit qu'il s'agissait d'une "colonne vide". –

+0

D'où la ligne "En supposant que les champs" vides "sont définis sur" NULL "" – Treffynnon

+0

Je ne vous corrigeais pas, je ne faisais que préciser quelque chose. –

Questions connexes