【问题标题】:SQL procedure SELECT WHERE a set-column containts any value of a set-parameterSQL 过程 SELECT WHERE 集合列包含集合参数的任何值
【发布时间】:2016-01-15 17:33:14
【问题描述】:

我只是想知道当我有以下条目时是否有一种简单的方法:

++++++++++++++++++
+ id + languages +
++++++++++++++++++
+ 1  + DE        +
++++++++++++++++++
+ 2  + DE,EN     +
++++++++++++++++++
+ 3  + FR        +
++++++++++++++++++

我的过程中参数的值是'DE,EN,FR',他找到了以上所有条目。

我用谷歌搜索并找到了解决方案,我必须遍历参数中的所有值并用SUBSTRING 拆分它们并制作一个

FIND_IN_SET(splittedParam, `languages`)

为他们。

有没有更简单(代码更短)的方法?

【问题讨论】:

  • 我想你会发现你的数据结构不适合这种事情。您不应该在一列中包含单个值和列表。
  • 是的,它叫做规范化,但是你需要改变你的架构。
  • 你应该看到这个; stackoverflow.com/questions/3070384/… 作为理解为什么这种结构不好的一种方式。
  • 为什么会这样?它是一个列,您可以在其中保存一个或多个预定义 SET 的值:'languages' set('DE','EN','FR') 我不知道为什么 phpMyAdmin 提供这种列类型。跨度>
  • 所以你说我应该使用与我的条目表有一对多关系的表 LANGUAGES 而不是 SET 列?

标签: mysql


【解决方案1】:

为了澄清你应该如何规范化这个,我建议如下改变你的表格;

ID | Langauge
-------------
1  | DE
2  | EN
2  | DE
3  | FR

【讨论】:

  • 是的,谢谢,我猜到了^^ 答案真的很有帮助。我只是想知道为什么 phpMyAdmin 为列提供 SET 类型然后
猜你喜欢
  • 1970-01-01
  • 2013-06-07
  • 2020-06-17
  • 1970-01-01
  • 2018-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多