php和mysql排序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php和mysql排序问题相关的知识,希望对你有一定的参考价值。

数据表
id,name
1,张三
2,赵四
3,王五
想按照“张王李赵”的顺序得到数组,求解

最好有mysqlphp两种排序方法,谢谢

参考技术A 没这种排法,在代码中或者数据库中排序就分两种,一种是数字排序,一种是字母排序,比如张的首字母是z,王的首字母是w,按照字母表的顺序排序,没有你这种排法追问

方法肯定有,只是我还不知道

追答

你说这是根据汉字排序,汉字排序还要按你给出的顺序,再说在录入的时候又没加什么索引限制,只是在取出之后按你的顺序排序,根本没法做

追问

在mysql中可以用replace进行替换,改成数字进行排序,但由于需替换的内容太多,影响效率,故而想寻求一种更好的方法。还是那句话,没有解决不了的,只有不会或不知道的。

参考技术B

    php方法:

    可以查一下“冒泡排序”,可以实现

    只需要把往前推的规则改一下即可

    mysql方法:

    可以添加一个新的字段,name_type 你在输入数据的时候,姓张的name_type = 1 ,类似

    姓王的name_type= 2 ,查询的时候order by name_type asc 即可;

追问

因为没有排序字段,数据量又过大,所以不可能新建字段来完成。
至于冒泡排序,计算量太大,也不适合。

php排序比mysql“order by”好吗?

【中文标题】php排序比mysql“order by”好吗?【英文标题】:is php sort better than mysql "order by"? 【发布时间】:2011-04-06 21:21:23 【问题描述】:

我想知道,在性能方面并考虑在具有非常非常多 (> 1.000.000) 记录的表上选择 mysql 是否更好地使用 sql "order by" 对结果进行排序,或者在查询后使用经典编程排序算法...有人有什么建议吗?

坦克

【问题讨论】:

【参考方案1】:

mySQL,放下手来。它为此进行了优化,并且可以利用索引。这在 PHP 中会很糟糕(而且你会很快到达memory_limit)。

【讨论】:

【参考方案2】:

您正在将一个系统与在优化的 C 中实现的方法进行比较,旨在完成此任务,另一个您将在解释脚本语言中实现。

基本上,用 C 编写的任何东西都将比用 PHP 编写的等效函数快 10 到 100 倍。

如前所述,毫无疑问,正确配置数据库并让其完成工作效率要高得多。

【讨论】:

【参考方案3】:

MySQL 会赢。除了列出的其他原因之外,还有一个原因是,假设记录已经在数据库中,您不必将它们复制出数据库来对它们进行排序。并且对它们进行分页或子索引将很容易并自动优化。

简而言之,如果 DB 可以做到,那么 DB 应该做到,几乎总是这样。

【讨论】:

+1 - 传输数据进行排序将比在数据库上进行更昂贵。【参考方案4】:

假设您实际上在应用程序的内存中获取了记录,那么 mysql 仍然会击败您的应用程序,因为如果您正确配置数据库,它就不必排序。

如果你想在一个包含 1 个 Mio 记录的表中排序,你可以提供 in 索引,该索引通常被实现为一个 B-Tree,Mysql 可以在其中遍历并获得排序的结果。

【讨论】:

【参考方案5】:

有时,如果您可以避免“使用临时;使用文件排序”,这是值得的,尽管我没有进行广泛的测试。

1   SIMPLE  favorites   ref source_id,user2_id  source_id   3   const   137 Using index; Using temporary; Using filesort
1   SIMPLE  users   eq_ref  PRIMARY,updated PRIMARY 3   apm.favorites.target_id 1   Using where

我不是要求 mysql 按名称排序,而是在 ruby​​ 中这样做

results.sort_by |u| u.name.downcase

生成的 mysql 查询现在更简单了:

1   SIMPLE  favorites   ref source_id,user2_id  source_id   3   const   137 Using index
1   SIMPLE  users   eq_ref  PRIMARY,updated PRIMARY 3   apm.favorites.target_id 1   Using where

如果您返回的行数超过几百行,您当然不想这样做。

【讨论】:

以上是关于php和mysql排序问题的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 按指定字段自定义列表排序

PHP,MySQL 选择,按字段排序并分组

mysql首字母排序,抛弃传统的php首字母排序

MySQLi + PHP 按日期和 ID 降序排序

PHP MySQL Order By 关键词

php执行sql查询,输出结果只有1条!?