【问题标题】:Get the name of next enum field's value in MySQL获取 MySQL 中下一个枚举字段值的名称
【发布时间】:2014-01-25 18:27:58
【问题描述】:

我有一个 MySQL 数据库和一个表 table1 与列:

  • uint 类型的id
  • 其他一些现在不重要的字段(如nameage 等),
  • enum 类型的status (met, like, love, hate, kill)

对于插入的行(1, love),我想选择“下一个”status (hate)。

我的尝试:

我试过了:

SELECT (status + 1) FROM table1 WHERE id = 1

但它返回了4(索引,而不是文本值)。

当然:

SELECT status FROM table1 WHERE id = 1

返回love(文本值,而不是索引)。

问题:

有没有办法实现它(可能是某种“铸造”)?

我更喜欢不要弄乱数据库架构表的解决方案。

另外,我可以用status = status + 1UPDATE 那一行,而不是选择它,然后用UPDATE 再次选择它status = status - 1,但这是更糟糕的主意...

编辑

我被要求提供更多细节: 我没有任何额外的表格来保存我的枚举顺序。我刚刚用phpMyAdmin 添加了它,它的选择就像我描述的那样工作。 此外,当我用status = status + 1 更新表格时,我从love 得到hate

【问题讨论】:

    标签: mysql sql select enums enumeration


    【解决方案1】:

    这并不像您想象的那么容易。您如何管理枚举的顺序?通过身份证?通过排序列?至少您必须使用子查询或类似的东西。您能给我们一些更详细的信息吗?

    【讨论】:

      【解决方案2】:

      这样的?

      SELECT * FROM test 
      WHERE status+0=(SELECT (status + 0)+1 FROM test   WHERE id = 1)
      

      SQL Fiddle

      这是下一个状态

      SELECT (status + 0)+1 FROM test WHERE id = 1
      

      【讨论】:

      • 好的,但只有在表中插入值“hate”时才有效。我只有一排我提到过。而且我不能假设每次我的表中都会有枚举类型的所有可能值。
      • 那么问题出在哪里:即使id和状态不存在,您也想选择它?
      • 关闭。但只是状态。确切地说:具有给定 id 的字段的 next 状态将是什么(但不更新它)。
      • 但是“这里是下一个状态”返回数字不是值,它和我在帖子中写的一样(“我试过”部分)。我的问题是将返回的“4”转换为“讨厌”。
      • 或者,进入应用代码stackoverflow.com/questions/2350052/…
      猜你喜欢
      • 1970-01-01
      • 2013-04-08
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 2021-07-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多