【问题标题】:MySQL multiple column asc orderMySQL 多列 asc 顺序
【发布时间】:2012-02-22 04:53:16
【问题描述】:

我正在尝试按升序运行此查询:

SELECT title,project_index 
FROM projectdetail  
WHERE project_index BETWEEN 1 AND 6 
ORDER BY title, project_index ASC;

我需要两列按升序排列,但上述查询返回的结果只有一列按ASC 顺序排列。

【问题讨论】:

  • 我没有完全理解你的问题。但是你可以指定每一列的顺序,比如order by col1 asc, col2 asc, col3 desc等等
  • 我试过了,但它对我不起作用..我的查询是标题,项目索引这两列我想显示 asc 顺序但只有一列生效....
  • 请显示您的查询输出。
  • 也许 OP 正在考虑 ORDER BY project_index, title; ?

标签: mysql sql select sql-order-by


【解决方案1】:

升序是大多数(如果不是全部) DBMS 的默认,因此您的陈述在这方面有点奇怪,但是,您可以通过添加说明符 ASCDESC 来为每个单独的列指定顺序。

你的陈述会变成

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        title ASC
        , project_index ASC

编辑

正如@Arvo 和@Dems 所提到的,目前您在title 上对first 排序,在project_index 上排序相同的标题。如果您希望您的 project_index 首先排序,则必须将其放在 ORDER BY 子句的首位。

然后你的陈述就变成了

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        project_index ASC
        , title ASC

因为ASC 是默认的排序顺序,你可以一起省略它们

SELECT  title
        , project_index 
FROM    projectdetail 
WHERE   project_index BETWEEN 1 AND 6 
ORDER BY 
        project_index
        , title

【讨论】:

  • @user1135693 - 你能发布你的查询和结果吗?要么查询有问题,要么你偶然发现了一个错误。
  • 我的查询 SELECT title,project_index FROM projectdetail WHERE project_index BETWEEN 1 AND 6 ORDER BY title ASC,project_index ASC;
  • title asc 它即将到来的但项目索引它必须显示 1 到 6,但它显示 6 到 1
  • @user1135693 - 以及您的(相关)结果?
  • @user1135693 - 如果apple 有多个不同项目索引的记录,这将把最低项目索引放在第一位。如果你想要所有的项目索引(1)记录首先,无论名称,你需要先按project_index排序......(ORDER BY prroject_index, title
【解决方案2】:

如果您使用的是 mysql,请检查this

正如他们所说,您可以使用SELECT * FROM t1 ORDER BY key_part1 DESC, key_part2 ASC;

【讨论】:

  • 感谢您的回复.....但我仍然面临这个问题,我首先尝试过但仍然......
【解决方案3】:

按标题 ASC、project_index ASC 排序;

 SELECT title,project_index 
 FROM projectdetail  
 WHERE project_index BETWEEN 1 AND 6 
 ORDER BY title ASC, project_index ASC;

您可以添加更多列,例如ORDER BY col1 ASC, col2 ASC, col3 DESC;

【讨论】:

    【解决方案4】:

    试试这个:

    SELECT title, project_index 
    FROM projectdetail  
    WHERE project_index BETWEEN 1 AND 6 
    ORDER BY project_index, title;
    

    【讨论】:

      【解决方案5】:

      您尝试按升序对两列进行排序。在 mysql 中,您可以在查询中使用多个顺序。但是这里对 order by 的偏好非常重要。第一个获得最多的偏好,下一个获得第二个偏好。
      这意味着,您的查询是

      SELECT title,project_index FROM projectdetail  
          WHERE project_index BETWEEN 1 AND 6 ORDER BY title, project_index ASC;
      

      在哪里,按标题排序优先。 mysql首先会按升序对'title'列进行排序并显示结果。然后只有它会订购“project_index”列。所以你无法得到你想要的答案。

      【讨论】:

        【解决方案6】:

        您可以尝试以下检查并检查--

        SELECT title,project_index 
        FROM projectdetail  
        WHERE project_index BETWEEN 1 AND 6 
        ORDER BY title, project_index
        

        【讨论】:

          【解决方案7】:

          根据您的要求/查询,我认为不可能在同一个表中订购超过 2 列。如果您想根据价值订购,您可以这样做。

          SELECT lat,lon, title, zip, city, state, region,cantone 
          FROM company 
          WHERE title != '' AND state IN(1,3,4,5,6,7,9,2) 
          ORDER BY state=2,title asc
          

          在上面的查询中,它将首先按升序显示除 state=2 之外的所有标题,然后显示最后一个 state=2 的所有记录。

          【讨论】:

            【解决方案8】:

            使用

                ORDER BY title ASC,project_index ASC 
            

            而不是

                ORDER BY title, project_index ASC;
            

            分别为两者下订单,然后它会正常工作。

            【讨论】:

              猜你喜欢
              • 2016-05-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多