Je travaille sur une webapp avec un ensemble de données que les utilisateurs peuvent parcourir et modifier.Choisir une colonne avec une valeur par défaut ou une colonne avec une valeur définie par l'utilisateur sinon null?
Les utilisateurs veulent personnaliser l'un des champs qui apparaissent pour chaque élément, par exemple "product_name".
Chaque produit a un ensemble de valeurs par défaut dans une table, qui est la même pour tous les utilisateurs:
Le tableau des produits serait comme (sauter cruft syntaxe, vous voyez l'idée):
CREATE TABLE products (
pid int, # product id
pname varchar # product name (users want to customize this)
);
Je dois afficher le nom du produit personnalisé de l'utilisateur dans toutes les tables/listes de mon site chaque fois qu'il y a une valeur personnalisée pour ce produit, mais sinon afficher la valeur par défaut.
Pour l'efficacité de l'espace, j'ai pensé à utiliser une table supplémentaire qui sorte de "remplacer" les valeurs par défaut, pour un utilisateur donné, pour un produit donné. Les lignes sont ajoutées dans cette table si nécessaire. Un utilisateur qui ne personnalisez un nom de produit ne serait pas toutes les lignes là:
CREATE TABLE custom (
pid int,
userid int,
pname varchar
);
je peux facilement joindre ces deux tableaux identifiant du produit, et pourrait prendre la valeur par défaut (products.pname), ou modifié par l'utilisateur value (custom.pname) pour chaque ligne de php, mais j'espère qu'il y a un moyen plus efficace de le faire en MySQL.
Existe-t-il une expression qui me permet de choisir une colonne si elle n'est pas nulle, sinon en choisir une autre (sur deux tables)?
Suggérez-vous une autre façon de gérer cela?
Merci. PS: peut-être un type de JOIN qui permettrait à une colonne de la table 2 du même nom de surcharger une colonne du tableau 1 pour les lignes où elle existe dans la table 2?
Merci. J'ai trouvé un opérateur similaire appelé IFNULL(). IFNULL (expr1, expr2) semble être équivalent à COALESCE (expr1, expr2). Je ne suis pas sûr de l'utilité de cette variante car COALESCE() peut prendre plus de deux arguments. –
@faB: IFNULL est spécifique à MySQL; 'COALESCE' est un standard ANSI et peut être utilisé sur différentes bases de données. Comme vous l'avez mentionné, 'COALESCE' peut aussi prendre plus de deux paramètres. La plupart recommandent d'utiliser la syntaxe ANSI autant que possible. –