假设我在数据库中有很多包含的数字表格例如田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
,并在页面我只是用这个{$users[0].status_name}
取出编辑每一页上,如果我添加新的状态。所有必须做在数据库表中的状态添加新线一旦
但与第二种方法我在数据库目前约10桌,仅仅包含数字ID描述tbl_user_statuseds,tbl_currency_names,tbl_user_sex等
方法3 我不知道这是一个很好的做法,使用一次表来存储此ID? 例如
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除了i以外的左加入基于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只是为了兼容性。
您是否发现第三种方法有问题,或者您能否建议更好的方法?
我不认为第三种方法会滞后数据库,只要我为列id_type和id_number创建索引,我无法看到表的总大小超过几百条记录在任何时间。 我喜欢用PHP方式存储字段名称,你能举个例子吗? –
第二个选项的工作速度会比第三个快,这就是为什么我写了关于性能的原因,下一个关于例子的问题:函数就像:'function getStatusForId($ id){switch ...}'和模板内容如'echo getStatusForId($用户[0] .user_status)' –
其实我更喜欢方法3,即使它慢一点,或两个,因为这样你可以在管理界面创建页面,最终用户(客户端)可以重命名状态或添加新状态。我的意思是,如果他编辑删除新的状态,它会破坏程序,但我也相信,程序可以在所有物流(用户或系统的过程)可以在数据库表中定义的方式创建,而不是php –