【问题标题】:What's the proper way of creating a MySQL table for <select> field which is optional?为可选的 <select> 字段创建 MySQL 表的正确方法是什么?
【发布时间】:2011-11-24 14:01:22
【问题描述】:

我在制作表格时总是使用 auto_increment。现在我正在尝试为 html &lt;select&gt; 字段创建一个表,但问题是它设置为可选,因此第一个 &lt;option&gt;...&lt;/option&gt; 的值必须为 0。这是否意味着当我构建表时,第一个 auto_increment 也必须从 0 开始?这还有效吗?

编辑:感谢您的 cmets。我将在某些INNER JOIN 语句中使用该表,因此主键是其他表中的外键。如果用户不选择回答该字段,外键的值是多少?

【问题讨论】:

    标签: mysql auto-increment


    【解决方案1】:

    如果需要从 0 开始计数,则不能使用 auto_increment(无效)。

    但是,您可以在 HTML 中硬编码默认的 &lt;option&gt;。

    【讨论】:

    • 我也想过这个。但是如果用户没有回答&lt;select&gt; 字段(值为0),那么使用它作为外键的表的值是多少?我猜 NULL 但如果列设置为 INT,NULL 不等于 0?
    • 如果用户决定不使用您的选择,您可以忽略查询中的“部分”。你使用什么后端语言?在 PHP 中会是这样的:if($_POST['select'] == 0) // do nothing/alternative query
    • 是的,PHP。如果我用条件规避它,那么外键呢?将其设置为NULL?
    • 我不知道你要达到什么目标。你为什么使用INNER JOIN?使用LEFT JOIN 或RIGHT JOIN,MySQL 将为您填充 NULL 字段。
    • 确实如此。我想我会坚持插入一个0,然后因为一个空白值被转换为 0:&lt;option value="0"&gt;- choose -&lt;/option&gt;。
    【解决方案2】:

    他们真的没有任何关系。您可以通过多种方式做到这一点。您可以为这些选项创建一个表,然后您可以选择您喜欢的任何主键,auto_increment 与否。当你编写你的 html 时,你可以使用selected 标签来告诉你哪些是默认的。

    <option value="x" selected="selected">x</option>
    

    不过,这完全取决于您的数据库设计,无论您是否要为这些选项创建一个单独的表。

    【讨论】:

    • 你会如何设计它?如果我可以问。我想我不应该在外键中添加NOT NULL,然后像这样:columnname INT(9)。当值转换为0 时插入一个空白字符串,而插入NULL 则保持为NULL。你会用什么,0 或 NULL?
    • 如果列表可以根据用户输入增长,我会使用喜欢的东西 我不看看你为什么担心 0 而不是。只需显示表格的内容,让第一个选择的选项为空。 无论如何用户都会使用选择列表,对吧?
    • 哦,如果我的回答有用,请点赞。我是真正关心并受到支持的人之一:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 1970-01-01
    • 2012-06-01
    • 2011-08-19
    • 2017-03-19
    • 2014-08-28
    相关资源
    最近更新 更多