【问题标题】:MySQL using RegEx to update/select columnsMySQL 使用 RegEx 更新/选择列
【发布时间】:2015-09-27 15:18:52
【问题描述】:

我在互联网上搜索了一个答案,以选择与正则表达式模式匹配的每一列。我没有找到,或者我找到了,但我不明白,因为我是数据库新手。所以这是我试图运行的 sql:

UPDATE `bartosz` SET 'd%%-%%-15'=1

(我知道这很糟糕)

我有如下列: ID | d1-1-15 | d2-1-15 | d3-1-15 | d4-1-15 ...(5年,每月,每天)

那么有没有办法选择 2015 年的所有列? 我知道我可以在 php 中循环它,所以 sql 看起来像:

UPDATE `bartosz` SET 'd1-1-15'=1, 'd1-1-15'=1, 'd3-1-15'=1 [...]

但是会很长。

【问题讨论】:

  • 使用第二种方法,但去掉单引号。您可能应该在每个 id 和月份存储一行数据以及值。尝试将多列作为数组处理通常是个坏主意。
  • 您可以导出表格值,使用 php 应用“逻辑”,然后再次导入
  • @GordonLinoff 这比每个月有多个表要好。该表是关于员工销售的产品。所以 id 是产品的数量,而 column 是他们当天售出的产品数量
  • @MateuszSowiński 。 . .听起来像一个应该有大约三列的表(好吧,我会有其他的,比如创建日期和一个自动递增的 id)。
  • @GordonLinoff 你能说出哪 3 列吗?比如id、员工、日期、金额、产品名称?

标签: php mysql regex


【解决方案1】:

强烈考虑改变你的方法。拥有一个包含 2000 列的表在技术上可能是可行的,但是您使用 MySQL 的方式并没有充分利用 DATE 处理等可用特性。在大多数用例中,下表结构将提供更好的灵活性和可扩展性。

查看具有 key=>value 属性的表。

id   employee    date         units
1    james       2015-01-01   2
2    bob         2015-01-01   3
3    james       2015-01-02   6
4    bob         2015-01-02   4

使用上面的方法可以编写查询而不需要插入数百个列名。它还可以轻松扩展超过 5 年,而无需 ALTER 表。使用DATE 列类型,以便您可以轻松地按日期范围查询。还学习如何使用INDEXes,这样您就可以在员工和日期字段上放置唯一索引以防止重复。

【讨论】:

  • 这就是我想要的“单位”列。你可以称它为“产品”。还是我错过了您的用例?
  • 我的意思是我有很多产品...我应该像列:产品名称和列数量那样做吗?
猜你喜欢
  • 2019-01-11
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-24
相关资源
最近更新 更多