![](/img/trans.png)
[英]Oracle: Ordering/sorting records based on the difference value of a column data in different rows of same table
[英]Ordering-by the same column in a table with different sort order based on a condition using querybuilder
我有一張桌子,我需要根據條件更改順序條件,在此表上運行select語句時需要檢查條件。 如何使用查詢生成器(Doctrine)實現此目的。 示例:表名稱->產品
<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>
因此,在此表中,我需要首先檢查庫存值是否大於零,我需要按DESC順序(庫存列)進行訂購。 否則我需要訂購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>one</td>
<td>123</td>
<td>3</td>
<td>0</td>
<td>100</td>
</tr>
<tr>
<td>four</td>
<td>567</td>
<td>2</td>
<td>1</td>
<td>103</td>
</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>five</td>
<td>678</td>
<td>0</td>
<td>0</td>
<td>104</td>
</tr>
</tbody>
</table>
我試過的是
$query->addOrderBy(($query->expr()->neq('variant.instock', 0)), 'DESC')
->addOrderBy(($query->expr()->eq('variant.instock', 0)) , 'ASC');
最終,這將如下調用SQL查詢
SELECT * FROM product ORDER BY 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>
您的Sql代碼可以如下所示
SELECT * FROM product ORDER BY case when instock = 0 then 0 else 1 end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.