2015-10-16 49 views
1

我有一個非常不尋常的排序問題。我只好安排預先定義的位置的項目像什麼我現在已經在我的數據庫:不尋常的數據排序 - 按固定數據編號排序

sid - auto increment 
name - just something to distinguish varchar 100 
sorting - this is where we define the exact position of the item 

如果我們給sorting = 2任何產品,這將是在第二位置不管是什麼。但它應該按照排序定義。

我無法安排使用order by sorting desc的項目,因爲大多數項目未分配任何位置。由於某些已分配值的條目具有sorting = 0,因此根據計劃,所有排序值不等於零的項目應置於其他項目之前。

這是當前的代碼:

<?php 
    $conn=mysqli_connect("localhost","root","","work"); 
    $getthedetails=mysqli_query($conn,"select sid,sorting,name from sorting order by sorting asc"); 
    while($thelistis=mysqli_fetch_array($getthedetails)){ ?> 
    <div style="width:100px;font-weight:bold;color:#000;font-size:19px;font- family:arial;height:100px;padding:49px;background:silver;float:left;margin:10px;"> 
    <?=$thelistis['sorting']?> 
    </div> 
    <?php } ?> 

理想情況下,我想整理要像1,0,0,4,5,0,0,8。

我想要的是類似this

+0

嘗試'ORDER BY -sorting DESC' – LefterisL

+0

@TerisL,因爲我就是用這個到現在爲止,它不會工作。它不起作用,因爲對於非排序項目,排序可以具有值= 0 – Amani

+0

列和表都被命名爲「排序」? –

回答

0

試試這個下面

$getthedetails=mysqli_query($conn,"select id,sorting,name from tbl_sorting order by sorting asc"); 
$arrayList = array(); 
while($thelistis=mysqli_fetch_array($getthedetails)){ 
    $arrayList[] = $thelistis; 
} 

foreach($arrayList as $key=>$list){ 
    if($list['sorting'] != 0){ 
     //Keep current element of array 
     $temp = $arrayList[$key]; 
     //Make current element same as with the one to swap 
     $arrayList[$key] = $arrayList[$list['sorting']-1]; 
     //Swap the kept one to its place 
     $arrayList[$list['sorting']-1] = $temp; 
    } 
} 


foreach($arrayList as $key=>$list){?> 

<div style="width:100px;font-weight:bold;color:#000;font-size:19px;font- family:arial;height:100px;padding:49px;background:silver;float:left;margin:10px;"> 
    <?php echo $list['sorting']?> 
</div> 
<?php } ?> 

enter image description here

+0

soo soo謝謝 – Amani

+0

你好,答案是正確的,但當我通過排序desc它使用順序失敗。我想要的是安排具有預先定義的價值的項目,如果該值是空白,那麼最後輸入應該先來.. – Amani