Mysql ORDER BY(Column2 + Column3)如果Column1为空?

Giu*_*ini 2 mysql sql sql-order-by

我有一张CLIENTS这样的桌子:

------------------------------------------------
| ID |  Name     |   Surname   |    Company    |
------------------------------------------------
|  1 |  John     |      Doe    |               |
------------------------------------------------
|  2 |           |             |     Company 1 |
------------------------------------------------
|  3 |   Mark    |   Blue      |     Company 2 |
------------------------------------------------
|  4 |           |             |     Company 3 |
------------------------------------------------
|  5 |     Jim   |   Yellow    |               |
Run Code Online (Sandbox Code Playgroud)

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

结果插入(供查看)在表中,其中column NAME or COMPANYCompany(如果已编译)或Surname + Name(如果已编译Name和Surname)

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

表:

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

在这种情况下,我需要修改我的脚本基于此检查一种新的动态列返回:如果Company编译那么NEWCOLUMN = Company其他NEWCOLUMN = Surname + " " + Name 然后

SELECT * FROM CLIENTS ORDER BY NEWCOLUMN
Run Code Online (Sandbox Code Playgroud)

我该如何实现?

Nic*_*ick 6

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

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