gpt4 book ai didi

php - 按升序创建一个包含行的新表

转载 作者:行者123 更新时间:2023-11-29 03:10:53 25 4
gpt4 key购买 nike

我有一个数据库,其中有一个表,其中的行的值“ID”变化很大。它可能是这样的:


row1.ID = 5,row2.ID = 47,row3.ID = -6,ETC。
完全随机顺序。我可以在加载一个页面时创建另一个表,该页面将获取第一个表中的所有行并创建第二个表以按“ID”值的顺序排列它们。所以第二张表是:
row1.ID = -6,row2.ID = 5,row3.ID = 47,ETC。
这有意义吗?

最佳答案

当然,最简单的答案是在查询表时使用ORDER BY,然后您就可以控制查询结果集中行的顺序。但我假设您的意思是当您不使用 ORDER BY 时,您希望行的“自然”顺序为数字顺序。

如果您的表使用 InnoDB 存储引擎,当您不使用 ORDER BY 进行查询时,默认顺序始终是主键的顺序。这是因为 InnoDB 按主键将表存储为聚集索引。因此,如果 ID 是您的主键,并且您将表转换为 InnoDB,那么您可以依赖它的自然顺序。

mysql> ALTER TABLE MyTable ENGINE=InnoDB;

如果您的表存储为 MyISAM,则自然顺序是行在数据文件中的物理存储顺序,这与值的顺序甚至您创建行的顺序无关。

对于这些表,您可以按主键顺序转储表:

$ mysqldump --order-by-primary databasename tablename > table.sql

然后恢复表。数据将按主键顺序重新加载。随后,当您不使用 ORDER BY 进行查询时,默认顺序将按 ID 排序。但这并不能防止行在值更改时再次出现乱序。


回复你的评论:

最好的选择是使用WHERE。这是高效的,因为它可以使用聚簇索引非常快速地找到正确的行。

SELECT * FROM MyTable WHERE ID = 6;

另一种方法效率较低,但仍比返回所有行要好,它是根据行在流中的位置而不是它们的值来选择一些行。

SELECT * FROM MyTable LIMIT 1 OFFSET 5;

第一个数字是你想要多少行,第二个数字是先跳过多少行。

通常您只想在指定顺序后使用 LIMIT ,否则您可能会以某种无意义的顺序获取行,并且第五行不会比第一行更令人满意.

SELECT * FROM MyTable ORDER BY created_at LIMIT 1 OFFSET 5;

关于php - 按升序创建一个包含行的新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8622000/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com