[英]How to use PHP natsort to sort out mysql records
我一直在嘗試用 mysql 查詢來整理我的 mysql 記錄,但似乎無法按自然順序進行。 我有 a1、a2、a3 到 a200,然后是 b1 等等的值,但是當在 mysql 中對它們進行排序時,我得到的結果是 a1、a10、a100 和任何不想要的結果,所以我想知道 php natsort 是否更好賭注。
我的桌子看起來像這樣:
NAME POSITION
a1 45
a2 67
a3 89
依此類推,重點是根據NAME中值的自然順序更新position中的值所以a1應該是position 1,a2應該是2等等。 到目前為止,這是我的 PHP:
$values = $mysqli->query("SELECT name FROM table ORDER BY position ASC");
$sortit = natsort($values);
foreach($sortit as $pos=>$nam) {
$mysqli->query("UPDATE table SET position=$pos WHERE name=$nam");
}
但我不知道從這里到 go 哪里。 你能告訴我正確的方向嗎?
無需在查詢中使用ORDER BY
,因為您將在 PHP 中對其重新排序。
您需要獲取所有名稱的數組。 $mysqli->query()
返回結果 object,而不是值數組。
$result = $mysqli->query("SELECT name FROM table");
$values = [];
while ($row = $result->fetch_assoc()) {
$values[] = $row['name'];
}
natsort($values);
$stmt = $mysqli->prepare("UPDATE table SET position = ? WHERE name = ?");
$stmt->bind_param("is", $pos, $nam);
foreach ($values as $pos => $nam) {
$stmt->execute();
}
natsort()
不返回排序后的數組,它對數組進行就地排序。
好的,感謝 Barmar 讓我朝着正確的方向前進。 這可能不是最優雅的解決方案,但它工作得很好:
$result = $connect->query("SELECT name FROM table");
$values = [];
while ($row = $result->fetch_assoc()) {
$values[] = $row['image'];
}
$sorted = $values;
natsort($sorted);
$i = 0;
foreach($sorted as $pos=>$nam) {
$num = $i++;
$sql = "UPDATE table SET position = '$num' WHERE name = '$nam'";
mysqli_query($connect, $sql);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.