首页 > 解决方案 > 格式化整数以使用货币,然后按 DESC 排序

问题描述

我正在尝试按 DESC 顺序对数值进行排序,并且在大多数情况下,以下查询完成了这项工作,除了一些无序的数字。

    "SELECT CONCAT('$',FORMAT(soldprice, 0)) AS soldprice FROM wp_previous_listings WHERE wp_previous_listings.main_email = '". $current_email ."' ORDER BY CHAR_LENGTH(soldprice) DESC"

数据库中的 soldprice 值是整数(保存为双精度)(没有逗号或 $)。我使用 CONCAT 格式化 soldprice 以在查询中添加 $ 和逗号,然后计算每个 soldprice 的长度以用于订购目的。

电流输出

    $10,450,000
    $4,400,000
    $1,700,000
    $1,287,500
    $8,800,000
    $8,750,000
    $6,669,828
    $5,200,000
    $4,850,000

预期产出

    $10,450,000
    $8,800,000
    $6,669,828
    $5,200,000
    $4,850,000
    $4,400,000
    $1,700,000
    $1,287,500

关于如何进行的任何想法?

标签: mysqlformatnumbers

解决方案


哦,我现在明白了,您将别名称为与数据库中的实际列名相同的名称,并且在其$上连接了一个字符串,因此它现在是一个字符串,并且数字的字符串表示形式不像实数那样排序。

所以去吧

SELECT CONCAT('$',FORMAT(soldprice, 0)) AS sp 
FROM wp_previous_listings 
WHERE wp_previous_listings.main_email = '". $current_email ."' 
ORDER BY soldprice DESC"

我个人不会在 PHP 而不是 SQL 中使用货币连接,但无论如何

您的脚本对SQL Injection Attack开放。即使您正在逃避输入,它也不安全! 您应该考虑在或API 中使用准备好的参数化语句,而不是连接值MYSQLI_PDO


推荐阅读