我正面临着一个独特的挑战。
我有一个有100个数字的表格,叫做HUNDREDNUMBERS。我想选择最好的季度(75到100个数字),并将它们放入另一个名为BESTQUARTER的表中。
我还想选择最差的季度(1到25个数字),我想把它们放到另一个名为WORSTQUARTER的表中。
这是我的Mysql代码,到目前为止,
$Extract_Data = "
CREATE TABLE $BESTQUARTER
SELECT
HUNDREDNUMBERS.number
FROM
HUNDREDNUMBERS order by
HUNDREDNUMBERS.number desc LIMIT 25 ";
$QuerySuccess = mysql_query($Extract_Data, $connection);另一张桌子..。
$Extract_Data = "
CREATE TABLE $WORSTQUARTER
SELECT
HUNDREDNUMBERS.number
FROM
HUNDREDNUMBERS order by
HUNDREDNUMBERS.number asc LIMIT 25 ";
$QuerySuccess = mysql_query($Extract_Data, $connection);问题是这个脚本并不是每次都是100%正确的。请注意两个查询中的ASC和DESC。这是一种尝试对数字进行排序的巧妙方法。
顺便说一句,HUNDREDNUMBERS表中的一些数字有小数点。我需要两个新表BESTQUARTER和WORSTQUARTER中的数据进行进一步处理。
非常感谢您的任何帮助。
发布于 2013-04-08 21:02:11
您正在进行字符串比较,并且这些比较遵循与数字数据类型不同的规则;我建议您更改排序表达式:
ORDER BY CAST(HUNDREDNUMBERS.number AS UNSIGNED) DESC|ASC如果需要分别支持负数或浮点数,也可以使用SIGNED或DECIMAL(M, N)来代替UNSIGNED。
或者(也是最好的),您可以将number列更改为按其自身正确排序的类型;VARCHAR应该主要用于文本。
发布于 2013-04-08 21:03:53
您应该检查数据类型。确保这些数字至少存储为一个小数。其他数据类型可能导致排序关闭(这是一个非常常见的错误)。这看起来很简单,但从我对这个问题的理解来看,你的代码实际上看起来是正确的。
发布于 2013-04-08 20:55:14
如果您只有100个数字,我建议您创建一个具有排名的视图,并将其用于后续处理。使用中间表似乎有点过头了:
select hn.*,
(select count(*) from hundrednumbers hn2 where hn2.number <= hn.number
) as rank
from HundredNumbers hn有了hundrednumbers(number)上的索引,这甚至会有不错的性能。
您遇到的问题可能是原始数据中的重复。如果是这样的话,看看队伍可以帮助你弄清楚在这种情况下该怎么做。
https://stackoverflow.com/questions/15879380
复制相似问题