Sql 使用querybuilder根据条件以不同的排序顺序按表中的同一列排序

Sql 使用querybuilder根据条件以不同的排序顺序按表中的同一列排序,sql,doctrine,query-builder,shopware,Sql,Doctrine,Query Builder,Shopware,我有一个表,在这个表上运行select语句时,我需要根据需要更改排序条件的条件检查一个条件。 如何使用查询生成器(条令)实现这一点。 示例:表名->产品 <table> <tr> <th>pid</th> <th>Lastname</th> <th>instock</th> <th>laststock</th> <th>

我有一个表,在这个表上运行select语句时,我需要根据需要更改排序条件的条件检查一个条件。 如何使用查询生成器(条令)实现这一点。 示例:表名->产品

<table>
  <tr>
    <th>pid</th>
    <th>Lastname</th> 
    <th>instock</th>
    <th>laststock</th> 
    <th>price</th>
  </tr>
  <tr>
    <td>two</td>
    <td>234</td> 
    <td>1</td>
        <td>1</td> 
    <td>101</td>
  </tr>
  <tr>
    <td>three</td>
    <td>345</td> 
    <td>0</td>
        <td>1</td> 
    <td>102</td>
  </tr>
  <tr>
    <td>four</td>
    <td>567</td> 
    <td>2</td>
        <td>1</td> 
    <td>103</td>
  </tr>
  <tr>
    <td>five</td>
    <td>678</td> 
    <td>0</td>
        <td>0</td> 
    <td>104</td>
  </tr>
  <tr>
    <td>one</td>
    <td>123</td> 
    <td>3</td>
        <td>0</td> 
    <td>100</td>
  </tr>
</table>
最终这将调用下面这样的SQL查询

SELECT * FROM product ORDER BY instock <> 0 DESC, instock = 0 ASC
按instock 0 DESC从产品订单中选择*,instock=0 ASC
并给出这样的输出

<table style="width: 100%;">
<tbody>
<tr>
<th>pid</th>
<th>Lastname</th>
<th>instock</th>
<th>laststock</th>
<th>price</th>
</tr>
  <tr>
<td>two</td>
<td>234</td>
<td>1</td>
<td>1</td>
<td>101</td>
</tr>
    <tr>
<td>four</td>
<td>567</td>
<td>2</td>
<td>1</td>
<td>103</td>
</tr>
  <tr>
<td>one</td>
<td>123</td>
<td>3</td>
<td>0</td>
<td>100</td>
</tr>
  <tr>
<td>three</td>
<td>345</td>
<td>0</td>
<td>1</td>
<td>102</td>
</tr>
  <tr>
<td>five</td>
<td>678</td>
<td>0</td>
<td>0</td>
<td>104</td>
</tr>
</tbody>
</table>

pid
姓氏
因斯托克
最后的股票
价格
二
234
1.
1.
101
四
567
2.
1.
103
一
123
3.
0
100
三
345
0
1.
102
五
678
0
0
104

您的Sql代码可以如下所示

  SELECT * FROM product ORDER BY case when instock = 0 then 0 else 1 end 

请回复,如果表格不容易阅读,我会发布表格的图片。是的,但我需要在querybuilder中进行更改。如何在querybuilder中添加“CASE”?
<table style="width: 100%;">
<tbody>
<tr>
<th>pid</th>
<th>Lastname</th>
<th>instock</th>
<th>laststock</th>
<th>price</th>
</tr>
  <tr>
<td>two</td>
<td>234</td>
<td>1</td>
<td>1</td>
<td>101</td>
</tr>
    <tr>
<td>four</td>
<td>567</td>
<td>2</td>
<td>1</td>
<td>103</td>
</tr>
  <tr>
<td>one</td>
<td>123</td>
<td>3</td>
<td>0</td>
<td>100</td>
</tr>
  <tr>
<td>three</td>
<td>345</td>
<td>0</td>
<td>1</td>
<td>102</td>
</tr>
  <tr>
<td>five</td>
<td>678</td>
<td>0</td>
<td>0</td>
<td>104</td>
</tr>
</tbody>
</table>
  SELECT * FROM product ORDER BY case when instock = 0 then 0 else 1 end