【问题标题】:Mysql ORDER BY (Column2+Column3) if Column1 is empty?如果Column1为空,Mysql ORDER BY(Column2 + Column3)?
【发布时间】:2019-10-04 17:44:58
【问题描述】:

我有一张这样的桌子CLIENTS

------------------------------------------------
| ID |  Name     |   Surname   |    Company    |
------------------------------------------------
|  1 |  John     |      Doe    |               |
------------------------------------------------
|  2 |           |             |     Company 1 |
------------------------------------------------
|  3 |   Mark    |   Blue      |     Company 2 |
------------------------------------------------
|  4 |           |             |     Company 3 |
------------------------------------------------
|  5 |     Jim   |   Yellow    |               |

实际上我有一个脚本 PHP,它返回结果 SELECT * FROM CLIENTS ORDER BY Company ASC。按 ASC 字母顺序检索结果

结果被插入(用于查看)表中,其中列NAME or COMPANYCompany(如果已编译)或Surname + Name(如果已编译姓名和姓氏)

<?php
foreach ( $row as $res )
if ( $res['Company'] != "" ) { echo $res['Company']; } else { echo $res['Surname'] . " " . $res['Name']; }
?>

表格:

<table>
   <tr>
     <th>NAME or COMPANY</th>
     <th>others info</th>
   </tr>
   <tr>
     <td>Doe John</td>
     <td> </td>
   </tr>
   <tr>
     <td>Yellow Jim</td>
     <td> </td>
   </tr>
   <tr>
     <td>Company 1</td>
     <td> </td>
   </tr>
   <tr>
     <td>Company 2</td>
     <td> </td>
   </tr>
   <tr>
     <td>Company 3</td>
     <td> </td>
   </tr>
</table>

但我的结果不正确,因为有 2 条记录为空 Company

Company 不是必填字段:如果Company 为空,则需要编译NameSurname 字段。

在这种情况下,我需要根据此检查修改我的脚本以通过新的动态列返回:如果 Company 已编译,则 NEWCOLUMN = Company 否则 NEWCOLUMN = Surname + " " + Name 那么

SELECT * FROM CLIENTS ORDER BY NEWCOLUMN

我怎样才能做到这一点?

【问题讨论】:

  • 我们如何知道没有名字的公司和没有名字的公司之间的关系?

标签: mysql sql sql-order-by


【解决方案1】:

您可以使用CASE 表达式来创建新的列值:

SELECT *,
       CASE WHEN Company != '' THEN Company
            ELSE CONCAT(Surname, " ", Name) 
       END AS newcolumn
FROM clients
ORDER BY newcolumn

【讨论】:

    【解决方案2】:

    我建议:

    order by company_name, surname, name
    

    这还有一个好处是可以使用索引。

    如果你想要这个专栏:

    select coalesce(company_name, concat_ws(' ', surname, name)) as newname
    

    这里假定“空”表示NULL

    【讨论】:

      【解决方案3】:

      您可以像这样编辑查询:

      SELECT if (company='', concat(Surname, " ", Name) , company) as NEWCOLUMN 
      FROM clients ORDER BY NEWCOLUMN
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-03
        • 2011-01-29
        • 1970-01-01
        • 2019-03-14
        • 2021-04-25
        相关资源
        最近更新 更多