Sql 使用querybuilder根据条件以不同的排序顺序按表中的同一列排序
我有一个表,在这个表上运行select语句时,我需要根据需要更改排序条件的条件检查一个条件。 如何使用查询生成器(条令)实现这一点。 示例:表名->产品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>
<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