我有一個完整的id(tID),它是在開始時用「w」創建的,後跟一個數字(int)一個點和另一個數字(int)。MYSQL高級排序
樣品編號的:
w1.3, w1.12, w1.1, w1.1, w2.10, w2.4
當我使用ORDER BY tID
返回的數組
w1.1, w1.12, w1.2, w1.3, w2.10, w2.4.
我想它是
w1.1, w1.2, w1.3, w1.12, w2.4, w2.10
這是可能的MySQL查詢中?
我有一個完整的id(tID),它是在開始時用「w」創建的,後跟一個數字(int)一個點和另一個數字(int)。MYSQL高級排序
樣品編號的:
w1.3, w1.12, w1.1, w1.1, w2.10, w2.4
當我使用ORDER BY tID
返回的數組
w1.1, w1.12, w1.2, w1.3, w2.10, w2.4.
我想它是
w1.1, w1.2, w1.3, w1.12, w2.4, w2.10
這是可能的MySQL查詢中?
是的,這是可能的。但是你應該考慮只存儲2個整數,而不是w
,並且在2列中。
在此期間,您可以使用此:
ORDER BY
CAST(SUBSTRING_INDEX(REPLACE(tID, 'w', ''), '.', 1) AS SIGNED INT)
, CAST(SUBSTRING_INDEX(tID, '.', -1) AS SIGNED INT)
有可能
select *
from sorting
order by cast(substring(tID,2) as DECIMAL);
被警告,這些功能需要在每一行operatate表中的,所以如果它的一大考慮使用的東西其他。
現在,w1.1與之前不同,現在將w1.1的前面。 – JNK 2012-03-26 13:49:09
將結果傳遞回來並對調用MySQL的語言進行排序可能更有效。
例如:
<?php
$sql = mysql_query("select * from `sorting`");
$arr = []; // Array() before PHP 5.4
while($a = mysql_fetch_assoc($sql)) $arr[] = $a;
usort($arr,function($a,$b) { // use create_function before PHP 5.3
return strnatcasecmp($a['tID'],$b['tID']);
});
// $arr is now ordered the way you wanted it in the query
// but there is no ordering in MySQL, which may improve performance
// depending on the database engine you're using.
?>
由於有沒有那麼多的項目到目前爲止,我可能會用這個去。 – JNK 2012-03-26 13:50:33