0

假设我在数据库中有许多包含数字 id的表,例如字段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 一样,除了我离开加入这个基于 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只是为了兼容性。

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

4

1 回答 1

0

方法1明显不方便支持,不建议

方法2是不错的选择,只是不要使用LEFTJOIN,INNER好多了

方法 3 不是很好的选择,因为性能原因,所以我建议 2nd

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

于 2013-10-15T01:12:05.830 回答