最好的存储方式"其他"数据进入MySQL数据库

时间:2015-12-10 05:35:14

标签: php mysql database-schema

我有一个带单选按钮的表单,它存储我的MySQL数据库中的值(即ID)以及来自用户的必要信息。

INSERT INTO table (user_id, name, address, prefer_id) VALUES ('', ?, ?, ?);

因此,当我尝试获取数据时,我使用LEFT JOINtable2获取必要的说明:

SELECT a.name, a.address, b.prefer_desc FROM table a
LEFT JOIN table2 b ON a.prefer_id = b.prefer_id
WHERE a.user_id = ?

但我创建了另一个选项,以防用户喜欢的选项不在列表中。当用户在单选按钮列表中选择Other时,将显示一个文本框,以便他们可以自由输入他们的首选数据。请查看此fiddle以查看示例。

我所想到的第一个逻辑是创建一个单独的表来存储用户的输入数据。

other_tb:

 other_id | user_id | typed_in |
----------+---------+----------+
    1     |     1   |   cake   |
    2     |     3   |   pizza  |

因此,当我获取数据时,如果phpif()(或其他),则使用prefer_id&#39} 4条件,如果是,我将使用另一个SELECT查询来获取other_tb表中的其他数据。

SELECT typed_in FROM other_tb WHERE user_id = ?

有没有办法在一个查询中完成所有这些?

OR

这是最好的选择,还是在这种情况下有正确或更好的方式?

3 个答案:

答案 0 :(得分:0)

试试这个

  <body data-ng-app="myApp" data-ng-controller="myController" data-ng-init="init()">
  <label>First Name</label>
  <input type="text" name="firstname" data-ng-model="empData.firstname" /></br>

  <label>Technical Skills</label>
  <span ng-repeat="tech in technology">
  <input type="checkbox" ng-model="tech.selected" value={{tech.name}} /> {{tech.name}}
</span>
</body>

答案 1 :(得分:0)

如果你正在使用你所描述的第二个表,并且你想保持输出的相同格式,并假设other_tb中的记录对于每个user_id都是唯一的,你可以使用类似的东西这样:

SELECT a.name, a.address, 
       CASE 
           WHERE a.prefer_id = 4 THEN c.typed_in
           ELSE b.prefer_desc
       END CASE AS prefer_desc
FROM table a
LEFT JOIN table2   b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id   = c.user_id
WHERE a.user_id = ?

我认为这也可以写成:

SELECT a.name, a.address, 
       CASE a.prefer_id
           WHERE 4 THEN c.typed_in
           ELSE b.prefer_desc
       END CASE AS prefer_desc
FROM table a
LEFT JOIN table2   b ON a.prefer_id = b.prefer_id
LEFT JOIN other_tb c ON a.user_id   = c.user_id
WHERE a.user_id = ?

答案 2 :(得分:0)

我可以根据情况练习两种方法:

  1. 允许用户添加更多选项,以便他们的答案仍被索引到table2。因此,在获取数据时,您仍可以使用LEFT JOIN来获得用户的首选选项,而无需任何其他条件。但是此方法将允许用户查看其他用户添加的选项。
  2. 如果选项是“固定的”,并且仅允许管理员向table2添加选项,请在table1的另一列中存储用户的other答案(让例如other_option列)。此方法允许用户仍然自由声明其选项,而无需向table2添加选项。

这里是table1

+---------+------+---------+-----------+--------------+
| user_id | name | address | prefer_id | other_option |
+---------+------+---------+-----------+--------------+

我要做的是,如果用户喜欢回答prefer_id,我将other_option设为0。因此,您的程序期望如果prefer_id为0,则您在other_option中有一个输入。