【问题标题】:Store multiple of numbers/words into a single database field将多个数字/单词存储到单个数据库字段中
【发布时间】:2013-07-09 12:36:57
【问题描述】:

目前我会简单地循环思考这些数字,然后将它们添加为单独的数据行。

DB(managedid 是 ref 的外键)

  ----------------------
  | managedid | option |
  |-----------|--------|
  |     2     |   3    |
  |     2     |   6    |
  |     2     |   12   |
  |     2     |   54   |
  |     2     |   123  |
  ----------------------

但是可能有很多,然后要更新它,我只是将所有内容都删除并重新输入。

但如果可以这样做:

  ------------------------------
  | managedid | option         |
  |-----------|----------------|
  |     2     | 3,6,12,54,123  |
  ------------------------------

因此,不仅减少了 db 表中单个项目的数量,而且更新也会更简单。

目前我会追加说'|'在输出的每个数字之后,它们都会爆炸,因此它们再次变成单数,但想知道是否有更好的方法

【问题讨论】:

  • 相信用逗号分隔的单条记录是个好主意的人数实在令人难以置信;特别是当他们需要选择12 在列表中的位置或类似位置时,然后抱怨性能,因为它无法在单个逗号分隔值上建立索引。不要反规范化,因为它会减少表中的记录数量,设计良好的数据库可以处理表中的数十亿条记录……您只会在将来为自己制造问题
  • 我理解你的消息,但因为我不需要获取任何单独的值,所以我总是需要获取那个 managedid 的所有值,所以这就是为什么我想沿着数组连接路线走.感谢您的消息,但对其他人阅读会有好处

标签: php mysql


【解决方案1】:

查看你的 mySQL 手册中的 group_concat 函数

【讨论】:

  • 那个我不记得了。
【解决方案2】:

您可以使用implode() 将值组合成一个字符串,但值得注意的是,将所有值保存在一个字段中使得搜索非常不切实际,因为它们无法被合理地索引。例如,如何找到所有选择了选项3managedids?

【讨论】:

    【解决方案3】:

    你也可以试试 PHP implode 函数。

    http://us2.php.net/manual/en/function.implode.php

    这将采用一个数组并使用您选择的分隔符构建一个字符串。

    【讨论】:

      【解决方案4】:

      感谢您的回复,但由于我永远不想单独分离任何值,所以我总是想要我想要沿着这条路线走的总值。

      所以我放弃了最初的想法,遍历结果并将它们加在一起,通过“|”分隔它们。

      然后使用 php 函数 explode 将它们分离出来以在我的表单中使用。

      添加它们:

           foreach ($options as $k => $opt) { $displayOptions .= $opt . '|'; };
      

      得到它们

           $opts = explode('|',$displayOptions['options']);
      

      【讨论】:

        猜你喜欢
        • 2012-05-21
        • 1970-01-01
        • 2013-02-20
        • 2013-10-20
        • 2022-06-18
        • 2013-07-10
        • 1970-01-01
        • 2016-10-30
        • 2016-06-21
        相关资源
        最近更新 更多