【发布时间】:2011-04-11 18:28:56
【问题描述】:
我正在开发一个 web 应用程序,其中包含一组用户可以浏览和编辑的数据。
用户希望自定义为每个项目显示的字段之一,例如“product_name”。
每个产品在一个表中都有一组默认值,对所有用户都是一样的:
产品表是这样的(跳过语法,你明白了):
CREATE TABLE products (
pid int, # product id
pname varchar # product name (users want to customize this)
);
只要有该产品的自定义值,我就需要在我网站上的所有表格/列表中显示用户的自定义产品名称,否则显示默认值。
为了节省空间,我考虑使用一个额外的表来“覆盖”任何给定用户、任何给定产品的默认值。行将根据需要添加到此表中。未自定义任何产品名称的用户将不会有任何行:
CREATE TABLE custom (
pid int,
userid int,
pname varchar
);
我可以轻松地在产品 ID 上加入这两个表,并且可以为 php 中的每一行选择默认值 (products.pname) 或用户编辑值 (custom.pname),但我希望有更多在 MySQL 中执行此操作的有效方法。
是否有一个表达式可以让我选择一列,如果不为空,则选择另一列(跨两个表)?
你会建议一种不同的方法来处理这个问题吗?
谢谢。
PS:也许是一种 JOIN 类型,它允许表 2 中具有相同名称的列覆盖表 1 中存在于表 2 中的那些行?
【问题讨论】: