-2

我按顺序从 db 行获取 10、12、13、21、06、02、08

我需要这样排序:02、06、08、10、12、13、21

按字段排序 ASC 不起作用我需要。我尝试删除零然后对数组进行排序,但没有结果。有什么想法吗?

欧梅里

sort(ARRAY) 成功了

$sql = "SELECT DISTINCT l, item, l, s FROM tr WHERE s = '".$_POST['size']."'  AND type = '".$type."' ORDER BY l ASC";
            $res = mysql_query($sql,$this->conn);
            $type = '<option selected="selected" disabled="disabled"></option>';

            while($row = mysql_fetch_array($res)){
                 $caption[] = $row;
            }
            sort($caption);
            foreach($caption as $row) {     

                    $length = substr($row['item'], strrpos($row['item'], '-') + 1);


                    $type .= '<option value="'.$length.'">'.$length.'</option>';
            }
4

4 回答 4

1

将这些数字的列类型更改为INT然后让它们排序。我想你现在有你的CHAR柱子VARCHAR

于 2012-12-26T17:53:18.467 回答
1

@Eric Petroelje 我会使用:

SELECT * FROM table ORDER BY CAST(col AS SIGNED) ASC

或者在所有数字前添加零。例如,1 变成 0001,2 变成 0002,这样你就会得到零,它们也会排序。哦,我看到你在下面评论说你也在使用 02 和 2。所以你可以忽略这个。

或者以正确的顺序添加一个额外的 INT 列。

于 2012-12-26T18:54:32.823 回答
0

排序应通过 MySQL 服务器完成。如果您没有得到正确的顺序,那么您的查询可能是错误的。另一个问题可能是您将数字存储为文本或其他数据类型?

但是,要删除开头的 0,您可以将变量显式转换为整数:

$numstring = (int)$realint;

于 2012-12-26T17:52:17.207 回答
0

听起来数据以 CHAR 或 VARCHAR 形式存储在 MySQL 中,因此当对列进行排序时,它会像字符串而不是数字一样对其进行排序。

除了将列的类型更改为 INT 之外,您还可以强制 MySQL 将其视为整数以进行排序(假设列中的所有值都是数字),如下所示:

SELECT fields
FROM mytable
ORDER BY CAST(col AS SIGNED)
于 2012-12-26T17:57:31.447 回答