【问题标题】:Selecting Set Data From Table Column从表列中选择集合数据
【发布时间】:2013-10-24 18:24:15
【问题描述】:

我已经设置了一个表,其中一个字段是集合类型 - set('1','2','3','4','5')。

有没有一种方法可以将集合类型数据下拉到网页上的表单中 - 就像您在更新记录时所做的那样,您可以在其中运行查询以从表中选择某些数据并将其下拉到您的更新表格。但是,与其拉下插入的数据——你能拉下设置字段时输入的集合类型数据吗?

【问题讨论】:

    标签: php mysql field


    【解决方案1】:

    您将需要查询 information_schema 表,然后使用 PHP 解析该字段(恕我直言,这应该是微不足道的)

    SELECT column_type 
    FROM information_schema.columns 
    WHERE TABLE_SCHEMA='your_database' 
      AND TABLE_NAME = 'your_table' 
      AND COLUMN_NAME = 'your_column'
    

    结果应该是这样的:set('1','2','3','4','5')

    【讨论】:

      【解决方案2】:

      虽然他专门写了关于ENUM,但Chris Komlenic 的文章8 Reasons Why MySQL's ENUM Data Type Is Evil 同样适用于SET。特别是:

       4. 获取不同 ENUM 成员的列表很麻烦。

      一个非常常见的需求是使用数据库中的可能值填充选择框或下拉列表。像这样:

      选择颜色:

      [ select box ]

      如果这些值存储在名为“colors”的引用表中,您只需要:SELECT * FROM colors ...然后可以将其解析出来以动态生成下拉列表。您可以在参考表中添加或更改颜色,您的性感订单表格将自动更新。太棒了。

      现在考虑邪恶的 ENUM:如何提取成员列表?您可以在表中的 ENUM 列中查询 DISTINCT 值,但这只会返回实际使用并存在于表中的值,不一定是所有可能的值。您可以查询 INFORMATION_SCHEMA 并使用脚本语言将它们从查询结果中解析出来,但这不必要地复杂。事实上,我不知道有什么优雅的、纯 SQL 的方法来提取 ENUM 列的成员列表。

      【讨论】:

      • 很好的见解,但这从未回答过问题
      • @AgRizzo:引用的最后一段准确描述了您在回答中展示的解决方案。不需要在 SO 的答案中演示代码,尤其是当 OP 在他的问题中没有显示代码并且强烈建议不要使用所请求的解决方案时。请删除您的反对票。
      • 如果 (1) 你编辑你的{在你编辑你的答案之前我不能改变我的投票} 并且 (2) 将我的代码复制到你的答案中作为示例代码,我会这样做。我将删除我的答案,支持你的。在那之前,您的回答虽然冗长,但在 IMO 中并不比“是的,它可以”更好。我不敢相信 OP 会问这个问题并且知道 information_schema 表是什么。因此,虽然添加代码超出了他们的要求,但我不觉得这是无关紧要的
      • @AgRizzo:您错过了最重要的一点,即以这种方式使用信息模式是“不必要的复杂”,实际上应该将集合存储在单独的关联表中。
      • 我不认为我错过了重点。我的目标是帮助 OP。 OP 有一个问题:他们有一张表,需要获取这些值。 他们需要帮助才能获得这些价值观。您的回答有助于他们了解设计的弱点。我同意:他们的设计并不理想,但他们是在寻求帮助以获得价值观,而不是批评他们的桌子设计。我看了你的帖子,觉得这对 OP 的具体问题没有帮助。
      猜你喜欢
      • 2020-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多