Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按字母顺序显示结果,但在按字母顺序排序的列表之前显示特定项_Mysql_Sorting - Fatal编程技术网

MySQL按字母顺序显示结果,但在按字母顺序排序的列表之前显示特定项

MySQL按字母顺序显示结果,但在按字母顺序排序的列表之前显示特定项,mysql,sorting,Mysql,Sorting,我在MySQL中有一个列表,按字母顺序排序如下 阿根廷 巴西 中国 马耳他 美国 由于我的客户大多来自美国,我希望在列表中首先显示,例如: 美国 阿根廷 巴西 中国 马耳他 这是我的密码- $sqlprimaryCategory = $dbh->prepare("SELECT * FROM $tableName GROUP BY primary_category "); 这是我试过但没用的- $sqlprimaryCategory=$dbh->prepare(“从$tableName组中

我在MySQL中有一个列表,按字母顺序排序如下

  • 阿根廷
  • 巴西
  • 中国
  • 马耳他
  • 美国
  • 由于我的客户大多来自美国,我希望在列表中首先显示,例如:

  • 美国
  • 阿根廷
  • 巴西
  • 中国
  • 马耳他
  • 这是我的密码-

    $sqlprimaryCategory = $dbh->prepare("SELECT * FROM $tableName GROUP BY primary_category ");
    
    这是我试过但没用的-
    $sqlprimaryCategory=$dbh->prepare(“从$tableName组中选择*按主要\类别顺序按主要\类别='USA'ASC,主要\类别ASC”)

    只需使用如下case语句执行条件order by

    查询: 编辑: 如果您想先按多个字段排序,然后按其他字段排序,您可以这样做

    SELECT * 
    FROM $tableName 
    GROUP BY primary_category
    ORDER BY 
        CASE primary_category 
          WHEN 'USA' THEN 1 --#-- 1 for usa
          WHEN 'China' THEN 2 --#-- 2 for china
          ELSE 3 END ASC, --#-- 3 for anything else
        primary_category ASC
    

    这里有一个更大的问题。你的逻辑

    如果有许多高优先级的产品类别,那么显然您需要另一列
    priority TINYINT(1)


    然后选择…
    orderbypriority DESC,category

    我发现最好更改物理数据:编号1到5,其中1是美国,其余是字母顺序。这样,您就不需要修改表,只需要获取数据。我将使用产品类别,而不是国家,因此,我将一直添加产品类别,因此如果我希望某些产品类别显示在顶部,那么一直对它们重新编号将是一项繁琐的任务。它们是否使用数字存储在数据库中?它们使用自动增量存储在MySQL中,因为这是必需的,所以它是一个自动递增的id,名称位于不同的栏目对吗?@user2333968当然!记住,如果您想添加多个订单,您也可以这样做。。我还要举个例子:)谢谢。干得好。正是我要找的!
    SELECT * 
    FROM $tableName 
    GROUP BY primary_category
    ORDER BY 
        CASE primary_category 
          WHEN 'USA' THEN 1 --#-- 1 for usa
          WHEN 'China' THEN 2 --#-- 2 for china
          ELSE 3 END ASC, --#-- 3 for anything else
        primary_category ASC