假设我在数据库中有许多包含数字ID 的表格,例如字段 user_type , user_status , user_currency 等。
现在我必须在我的网站页面上显示此信息和其他信息,比如我有10页,其中一些上述信息将被打印
方法1 当我写查询时,我做了类似
的事情SELECT ...
user_status
...
FROM users
WHERE user_id = 5
然后我传递给模板语言,我使用Smarty v3
然后在内部页面模板中执行类似
的操作{section ...}
...
{if $users[0].user_status == 1}
New User
{elseif $users[0].user_status == 2}
Application Accepted
{elseif $users[0].user_status == 3}
Payment received
{/if}
...
{/section}
因此相同的代码基本上分为10个不同的页面,当我更改某些内容或添加新状态,货币等时,我必须转到每个页面并将其添加到if语句
我认为这种方法非常不可靠且耗时
方法2 所以我开始这样做我创建另一个用户状态表,例如 tbl_user_statuseds
user_status_id status_name
1 New User
2 Application Accepted
3 Payment received
...
然后在每个页面的主查询中我做这样的事情
SELECT ...
tbl_user_statuseds.status_name
...
FROM users
LEFT JOIN tbl_user_statuseds ON tbl_user_statuseds.user_status_id = users.user_status
WHERE user_id = 5
并在页面i中使用{$users[0].status_name}
如果我添加新状态,则会在每个页面上进行编辑。所有必须做的就是在数据库表状态中添加新行一次
然而,对于第二种方法,我现在在数据库中有大约10个表,它们只包含数字ID描述 tbl_user_statuseds,tbl_currency_names,tbl_user_sex 等。
方法3 我想这是一个很好的做法,使用一次表来存储这个ID? E.g。
tbl_id_labels
id id_type id_number id_label
421 2 1 New User
422 2 2 Application Accepted
423 2 3 Payment received
424 8 1 USD
425 8 2 EURO
426 5 1 Male
427 5 2 Female
...
然后我就像方法2一样做,除了我离开基于id_number加入这个表,例如
SELECT ...
tbl_id_labels.status_name
...
FROM users
LEFT JOIN tbl_id_labels ON tbl_id_labels.id_number = users.user_status AND tbl_id_labels.id_type = 2
WHERE user_id = 5
这样我只有一个表格,其中包含我系统中数字ID的所有标签。 如果我必须在将来添加一个并不太困难,重要的是 id_type 和 id_number ,字段 id 仅用于兼容性。
您是否看到第三种方法有任何问题,或者您能建议更好的方法吗?
答案 0 :(得分:0)
方法1显然不便于支持,所以我不建议
方法2是不错的选择,只是不要使用LEFT
加入,INNER
要好得多
方法3不是很好的选择,因为性能,所以我建议第二次
另外,想一想 - 为什么需要在数据库中存储常量数据?创建10个php函数,它们将使用简单的开关/数组来输出ID的标题? - 这将是最快的方法