簡體   English   中英

如何使用PHP natsort整理mysql條記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM