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 COMPANY是Company(如果已编译)或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为空,则需要编译Name和Surname字段。
在这种情况下,我需要修改我的脚本基于此检查一种新的动态列返回:如果Company编译那么NEWCOLUMN = Company其他NEWCOLUMN = Surname + " " + Name
然后
SELECT * FROM CLIENTS ORDER BY NEWCOLUMN
Run Code Online (Sandbox Code Playgroud)
我该如何实现?
您可以使用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)
| 归档时间: |
|
| 查看次数: |
90 次 |
| 最近记录: |