2013-10-15 29 views
0

假设我在数据库中有很多包含的数字表格例如田USER_TYPEuser_statususer_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_typeid_number,字段id只是为了兼容性。

您是否发现第三种方法有问题,或者您能否建议更好的方法?

回答

0

方法1显然是不方便的支持,所以我不建议这

方法2是不错的选择,只是不使用JOIN LEFTINNER更好

方法3是不是很好选项,因为性能,所以我建议第二个

此外,只是想 - 为什么你需要在数据库中存储常量数据?创建10个php函数,它将使用简单的开关/数组来输出ID的标题? - 这将是最快的方法

+0

我不认为第三种方法会滞后数据库,只要我为列id_type和id_number创建索引,我无法看到表的总大小超过几百条记录在任何时间。 我喜欢用PHP方式存储字段名称,你能举个例子吗? –

+0

第二个选项的工作速度会比第三个快,这就是为什么我写了关于性能的原因,下一个关于例子的问题:函数就像:'function getStatusForId($ id){switch ...}'和模板内容如'echo getStatusForId($用户[0] .user_status)' –

+0

其实我更喜欢方法3,即使它慢一点,或两个,因为这样你可以在管理界面创建页面,最终用户(客户端)可以重命名状态或添加新状态。我的意思是,如果他编辑删除新的状态,它会破坏程序,但我也相信,程序可以在所有物流(用户或系统的过程)可以在数据库表中定义的方式创建,而不是php –