【问题标题】:How to stop database table from sorting values [duplicate]如何停止数据库表对值进行排序[重复]
【发布时间】:2016-12-27 03:24:30
【问题描述】:

那是mysql中的一个表,010预计是表的最后一个。我该如何处理?数据库自动对输入的值进行排序,其中id不需要

【问题讨论】:

  • 为什么 010 应该是最后一行?你能出示 DDL 吗?
  • 查看包含 VST/01、VST02、...VST09、VST010 的复合 ID
  • 对这个问题的否决票感到沮丧:-(
  • 您的问题更像是“如何在 phpmyadmin 中按记录输入顺序浏览数据库?”

标签: mysql sql database phpmyadmin


【解决方案1】:

数据库表是未排序的集合,没有内在顺序。如果您想按特定顺序获取行,则必须使用order by 子句显式指定它:

SELECT   *
FROM     mytable
ORDER BY CAST(visitorsid AS INTEGER)

【讨论】:

  • 我认为这里发生的事情是 phpmyadmin 在这里的封面下自动按 ORDER BY $col1, $col2... 拍打。如果 OP 使用您的查询而不是 phpmyadmin 的默认 what-you-get-when-you-click-browse-table,他会得到正确的结果。
【解决方案2】:

您可以通过长度指定字符字段的顺序,而不是标准排序顺序。

SELECT * FROM MY_TABLE ORDER BY LENGTH(visitorid);

我应该添加前导 0,我认为这不是数字字段。

【讨论】:

    【解决方案3】:

    您所要求的基本上是“按输入的顺序显示行”,这(严格来说)在 SQL 中是未定义的。

    我通常对表格执行的操作是添加一个 ID 列,例如:

    create table foo (id int not null primary key auto_increment, ...rest of columns...)
    

    这样,行可以按条目顺序排序。它也不必是主键——任何 auto_increment 列都可以。 (auto_increment 是一个 MySqlism,顺便说一句,其他 RDBMS 有其他语法来做基本相同的事情)。

    顺便说一句,严格来说,您的列是正确排序的——看起来它是一个 char 或 varchar 列,所以它是按字典顺序而不是数字排序的。如果您想将数据移植过来,我希望您可以执行以下操作:

    insert into new_table
    select * from old_table order by CAST(Visitorsid AS UNSIGNED)
    

    至少我认为这行得通...没有方便的 MySQL 命令行来尝试它:-)。祝你好运!

    (更新以修复 MySQL 语法并使用正确的列名)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-02
      • 2016-11-18
      • 2020-01-23
      • 2017-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多