我想手動對表格中的專案進行排序。背景是我列出了按專案型別分組的不同專案,然后按 id 排序,因此文章編號顯示為
Item type 1 - 4109
Item type 1 - 1342
Item type 1 - 3193
Item type 2 - 6971
Item type 2 - 0484
sql字串如下所示。
$sql = "SELECT * FROM '".$table."' WHERE model = '".$model."' ORDER BY item, id ASC";
我想根據定義的陣列對它們進行排序,而不是根據 id ASC 對文章編號進行排序,例如
$sortItem1 = [1342, 4109, 3193];
$sortItem2 = [0484, 6971];
專案應按專案分組列出,商品編號應按陣列 $sortItem1 和 $sortItem2 排序。結果應該是
Item type 1 - 1342
Item type 1 - 4109
Item type 1 - 3193
Item type 2 - 0484
Item type 2 - 6971
我不認為下面的代碼是可能的,但我希望它像
ORDER BY item, $sortItem1, $sortItem2
什么是最好的解決方案?
uj5u.com熱心網友回復:
我想我必須改用usort。我的想法是保存我需要的所有引數
$totalItems = 0;
$sortOrder = ['4109', '1342', '3193', '6971', '0484'];
while ($row = mysqli_fetch_array($result))
{
$itemsToSort[$totalItems][0] = $row['item'];
$itemsToSort[$totalItems][1] = $row['articleNumber'];
$totalItems ;
}
然后對陣列進行排序
usort($itemsToSort, function($a, $b) use ($sortOrder){
$valA = array_search($a[0], $sortOrder);
$valB = array_search($b[0], $sortOrder);
if ($valA === false)
return -1;
if ($valB === false)
return 0;
if ($valA > $valB)
return 1;
if ($valA < $valB)
return -1;
return 0;
});
然后我可以遍歷 $itemsToSort。
這似乎有效,但我需要為 $sortOrder 設定多個陣列。$sortOrder 應從可以命名為 $sort1、$sort2、$sort3 等的其他陣列中獲取其值。是否可以將 $sort1 陣列復制到 $sortOrder?
uj5u.com熱心網友回復:
在 ORDER 子句中
使用FIELD() 函式ORDER BY FIELD(item, 1342, 4109, 3193, 0484, 6971)
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/379977.html
標籤:mysql 排序 sql-order-by 排序
下一篇:Python,用鍵排序
