php和mysql排序问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php和mysql排序问题相关的知识,希望对你有一定的参考价值。
数据表
id,name
1,张三
2,赵四
3,王五
想按照“张王李赵”的顺序得到数组,求解
最好有mysql和php两种排序方法,谢谢
方法肯定有,只是我还不知道
追答你说这是根据汉字排序,汉字排序还要按你给出的顺序,再说在录入的时候又没加什么索引限制,只是在取出之后按你的顺序排序,根本没法做
追问在mysql中可以用replace进行替换,改成数字进行排序,但由于需替换的内容太多,影响效率,故而想寻求一种更好的方法。还是那句话,没有解决不了的,只有不会或不知道的。
参考技术Bphp方法:
可以查一下“冒泡排序”,可以实现
只需要把往前推的规则改一下即可
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排序问题的主要内容,如果未能解决你的问题,请参考以下文章